# Strings
Strings are the common value type in BBScript. These are the functions that allow for string manipulation.
Due to BBScript 2's unique literal resolution, if a literal is provided without quotes and a variable does not exist with that name, the literal will resolve to a string value.
The below would log in the console `"hello"` as a string.
```bbscript
(print hello)
```
Due to this quirk, it is recommended that if users wish to use a string literal, that they provide quotes.
---
## `+` Add
Adds or concatenates a string. As this uses Javascript's loose type coercion, it can either add two numbers, put two strings together, or convert a number to a string and put it together or vice versa. Takes an unlimited number of parameters.
```bbscript
(+ varArg1 varArg2 ...)
```
arguments unlimited
: The values to be concatenated together.
: There is no limit on the number of arguments that can be provided.
Return
: Operation is not done inplace, and will return a string value to the parent.
See also [Math `+` Add](./BBScript:-BBScript-2:-Math.md#-add)
---
## `contain`
Returns if a string contains a given substring.
```bbscript
(contain string substring)
```
string
: Given string to search. Must resolve to a string.
substring
: string to search for. Must resolve to a string.
Return
: Returns true if string contains the substring, false otherwise.
---
## `count`
Returns the length of the string.
```bbscript
(count string)
```
string
: Given string to count the length of.
Return
: Returns the length of the string.
---
## `split`
Splits a string into an array of strings. If provided a separator, will split the string using all that match that separator.
```bbscript
(split string separator)
```
string
: The string to be split. Must be a string or resolve to a string.
separator optional
: If provided, will split the string using the provided separator value. Must resolve to a string.
: _Default_ - By default, is an empty string. This will split the string into an array of individual characters
Return
: Returns an array of strings. Will not include the separator.
---
## `slice`
Returns a substring of the given string, defined at given indices. Follows the same rules as Javascript string [slice()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice).
```bbscript
(slice string start end)
```
string
: The string to take the substring from. Must resolve to a string.
start
: The starting index from where to begin the substring. Zero-index based. Will be the index of the first character to be included in the returned substring.
end
: The ending index where the substring ends. Zero-index based. Will be the index of the first character excluded from the returned substring.
Return
: Returns the substring selected.
---
## `lower`
Returns the given string in all lowercase.
```bbscript
(lower string)
```
string
: The string to be converted to lowercase.
Return
: Returns the lowercase version of the given string.
---
## `upper`
Returns the given string in all uppercase
```bbscript
(upper string)
```
string
: The string to be converted to uppercase.
Return
: Returns the uppercase version of the given string.
---
## `trim`
Trims the given string by remove whitespace at the beginning and end of the string.
```bbscript
(trim string)
```
string
: the string to be trimmed.
Return
: Returns a trimmed version of the string. All whitespace at the start and end of the string is removed. Whitespace in the middle of the string is untouched.
---
## `replace`
Replaces all substrings matching the needle inside of the given string with a provided replacement.
```bbscript
(replace string needle replacement)
```
string
: The string to perform the replacement on.
needle
: A string search for in the larger string. Will be replaced by the replacement string. Must resolve to a string.
replacement
: The replacement to use if the needle is found in the string.
Return
: Returns a string where all instances of the needle has been replaced by the given replacement.
---
## String Interpolation
String interpolation can be done by use `${}`.
```bbscript
(= foo "hello world")
(print "Msg: ${foo}")
```
Will print `"Msg: hello world"`.
If the variable does not exist, then string interpolation will not replace the template and will just be treated as a normal string.