String
String is a type that represents an immutable sequence of characters.
- This article is about the type. For the API, see String API. For the crafting ingredient, see Printed Pages.
Literal value
Strings can be used in a program's source code by using a string literal, which is typically indicated by enclosing the desired sequence of characters within a pair of single or double quotes:
<nowiki>
-- myString and myOtherString are variables that hold a string value
local myString = "Hello world!"
local myOtherString = 'Hola mundo!'
</nowiki>
Character escaping
To use characters such as a newline ( <nowiki>
local escapedString = "John: \"Hey There!\"\nAlex: \\Timidly\\ \"H h.. hi\""
print(escapedString)
--[[
The following will be printed:
John: "Hey There!"
Alex: \Timidly\ "H h.. hi"
]]
local ydots = "\255"
print(ydots) -- ÿ
</nowiki>
|
|
Multiline literals
The above method of expressing a string literal is for single-line usage only,
for a multi-line string literal, begin the sequence with [[
and terminate it with ]]
:
<nowiki>
local multilineString = [[
Hello world!
I span multiple lines!]]
</nowiki>
One thing to note is that when using the multiline literal, Lua will ignore the
first newline if nothing follows the initial [[
, but not the
trailing ]]
:
<nowiki>
local multilineString = [[
abc
def]]
print(multilineString == "abc\ndef") -- true
local secondMultiline = [[
abc
def
]]
print(secondMultiline == "abc\ndef\n") -- true
</nowiki>
Additionally, inside of a multiline string, there is no concept of escapes,
so using characters like "
and \
will represent themselves
instead of acting specially:
<nowiki>
local multilineString = [[
John: "Hey There!"
Alex: \Timidly\ "H h.. hi"]]
print(multilineString) -- Prints exactly what you would expect
print([[\255]]) -- Will print "\255" instead of "ÿ"
</nowiki>
Therefore, to include the [[
symbol, place =
symbols
between the brackets, like so:
<nowiki>
local myString = [=[
Hello world!
This [[can contain]] double square brackets
and still [be[[valid]]]
]=]
local myOtherString = [===[
You can nest these literals by using more ='s
Testing [=[ Hello! [[]] ]=]
like so ^^^^^^^^^^^^^^^^^^^
]===]
</nowiki>
There is no limit to the amount of =
's one can place between the brackets, thereby
allowing for deeply nested multline string literals, if desired.