.< output: ""
.< negative numbers are floored to 0
2. `last()` takes in int, gets last char up to n
```python
a-senpai = "01234"~
pwint(a.last(2))~
.< output: "34"
pwint(a.last(0))~
.< output: ""
pwint(a.last(999))~
.< output: "01234"
pwint(a.last(-1))~
.< output: ""
.< negative numbers are floored to 0
3. `substr()` takes two ints (n,m), gets from nth char up to mth char
```python
a-senpai = "01234"~
pwint(a.substr(0,2))~
.< output: "012"
pwint(a.substr(0,0))~
.< output: ""
pwint(a.substr(999,0))~
.< output: ""
.< if n >= m, it will return ""
pwint(a.substr(0,999))~
.< output: "01234"
pwint(a.last(-1, 2))~
.< output: "012"
.< negative numbers are floored to 0
4. `from()` takes str (item), returns empty string if item is not in string. returns substring containing item up to end of the string
```python
a-senpai = "01234"~
pwint(a.from("2"))~
.< output: "234"
pwint(a.from("5"))~
.< output: ""
pwint(a.from("34"))~
.< output: "34"
5. `upTo()` takes str (item), returns empty string if item is not in string. returns substring containing beginning of string up to item
```python
a-senpai = "01234"~
pwint(a.upTo("2"))~
.< output: "012"
first()
takes in int, gets from the 0th char up to n.pwint(a.first(0))~
pwint(a.first(999))~
pwint(a.first(-1))~
pwint(a.last(0))~
pwint(a.last(999))~
pwint(a.last(-1))~
pwint(a.substr(0,0))~
pwint(a.substr(0,999))~
pwint(a.last(-1, 2))~
pwint(a.from("5"))~
pwint(a.from("34"))~
pwint(a.upTo("5"))~
pwint(a.upTo("12"))~