Literals/String: Difference between revisions

m
→‎{{header|Wren}}: Changed to Wren S/H
(Added uBasic/4tH)
m (→‎{{header|Wren}}: Changed to Wren S/H)
 
(15 intermediate revisions by 8 users not shown)
Line 24:
=={{header|11l}}==
Character literals:
<langsyntaxhighlight lang="11l">V c = Char(‘a’)</langsyntaxhighlight>
 
Regular string literals are enclosed in double quotes, and use \ to delimit special characters:
<langsyntaxhighlight lang="11l">"foo\nbar"</langsyntaxhighlight>
 
Raw string literals are enclosed in paired single quotation marks:
<langsyntaxhighlight lang="11l">‘foo
bar’</langsyntaxhighlight>
If raw string literal should contains unpaired single quotation marks, then balancing of raw string should be performed:
<langsyntaxhighlight lang="11l">'‘‘don’t’ // the same as "don’t"</langsyntaxhighlight>
=={{header|6502 Assembly}}==
Strings are enclosed in double quotes.
<langsyntaxhighlight lang="6502asm">db "Hello World"</langsyntaxhighlight>
Any typed character in double quotes is assembled as the ASCII equivalent of that character. Therefore the following two data blocks are equivalent:
<langsyntaxhighlight lang="6502asm">db "Hello World"
db $48,$65,$6c,$6c,$6f,$20,$57,$6f,$72,$6c,$64</langsyntaxhighlight>
 
When using a single-character literal as an operand for an instruction, it MUST have a # in front, or else the CPU will treat it as a pointer being dereferenced rather than a numeric constant. (We've all made this mistake at least once without realizing it.)
<syntaxhighlight lang="6502asm">LDA #'A' ;load ascii code of "A" into the accumulator.
LDA 'A' ;load the byte stored at memory address 0x41 into the accumulator.</syntaxhighlight>
 
The assembler typically assumes nothing with regard to special characters. A <code>\n</code> will be interpreted literally, for example. How special characters are handled depends on the printing routine of the hardware's BIOS, or one created by the programmer. If your printing routine is able to support a null terminator and ASCII control codes, the following represents "Hello World" with the new line command and null terminator:
<langsyntaxhighlight lang="6502asm">db "Hello World",13,10,0</langsyntaxhighlight>
 
Creating your own printing routine is a bit out of the scope of this task but here's a simple demonstration that supports the \n and null termination:
<langsyntaxhighlight lang="6502asm">PrintString:
lda (StringPtr),y
beq Terminated
Line 67 ⟶ 71:
DoneSpecialChar:
iny
jmp PrintString ;jump back to top. Notice that neither the backslash nor the character after it were actually printed.</langsyntaxhighlight>
 
=={{header|68000 Assembly}}==
{{trans|6502 Assembly}}
Strings are enclosed in double quotes. [[C]] places a null terminator at the end of the string for you; in 68000 Assembly you have to type it manually (unless your assembler has an <code>.ASCIZ</code> directive or equivalent, and not all do).
<syntaxhighlight lang="68000devpac">DC.B "Hello World",0
EVEN</syntaxhighlight>
 
Any typed character in double quotes is assembled as the ASCII equivalent of that character. Therefore the following two data blocks are equivalent:
<syntaxhighlight lang="68000devpac">DC.B "Hello World",0
EVEN
 
DC.B $48,$65,$6c,$6c,$6f,$20,$57,$6f,$72,$6c,$64,$00
EVEN</syntaxhighlight>
 
When using a string literal as an operand for an instruction, it must begin with #, otherwise it will be treated as a pointer being dereferenced rather than the numeric constant you intended.
 
<syntaxhighlight lang="68000devpac">MOVE.L #'SEGA',D0 ;load the string "SEGA" into D0
MOVE.L '0000',D0 ;load the 32-bit value at address 0x00303030 (the most significant byte is always treated as zero,
;because the 68000 only has a 24-bit address space.</syntaxhighlight>
 
The assembler typically assumes nothing with regard to special characters. How special characters are handled depends on the printing routine of the hardware's BIOS, or in the case of embedded hardware with no BIOS or a very limited one like the Sega Genesis, the printing routine created by the programmer. By default, there is no support for any control codes unless you add it in yourself.
 
=={{header|Ada}}==
 
Single character literals require single quotes
<langsyntaxhighlight Adalang="ada">ch : character := 'a';</langsyntaxhighlight>
String literals use double quotes
<langsyntaxhighlight Adalang="ada">msg : string := "hello world";
empty : string := ""; -- an empty string</langsyntaxhighlight>
The length of a string in Ada is equal to the number of characters in the string.
Ada does not employ a terminating null character like C.
Line 87 ⟶ 112:
Aime has no character representation, but it allows single quoted character constants. Their implied typed is integer.
 
<langsyntaxhighlight lang="aime">integer c;
c = 'z';</langsyntaxhighlight>
 
String literals are double quoted.
 
<langsyntaxhighlight lang="aime">text s;
s = "z";</langsyntaxhighlight>
 
=={{header|ALGOL 68}}==
In ALGOL 68 a single character (CHAR), character arrays ([]CHAR) and strings (STRING) are contained in double quotes. ALGOL 68 also has FORMAT strings which are contained between dollar ($) symbols.
<langsyntaxhighlight lang="algol68">CHAR charx = "z";</langsyntaxhighlight>
Strings are contained in double quotes.
<langsyntaxhighlight lang="algol68">[]CHAR charxyz = "xyz";
STRING stringxyz = "xyz";
FORMAT twonewlines = $ll$, threenewpages=$ppp$, fourbackspaces=$bbbb$;</langsyntaxhighlight>
Note: When only uppercase characters sets are available (eg on computers with only
6 bits per "byte") the single quote can used to denote a reserved word. eg
<langsyntaxhighlight lang="algol68">.PR QUOTE .PR
[]'CHAR' CHARXYZ = "XYZ";</langsyntaxhighlight>
The STRING type is simply a FLEX array of CHAR.
<langsyntaxhighlight lang="algol68">MODE STRING = FLEX[1:0]CHAR;</langsyntaxhighlight>
ALGOL 68 also has raw strings called BYTES, this type is a fixed width packed array of CHAR.
<langsyntaxhighlight lang="algol68">BYTES bytesabc = bytes pack("abc");</langsyntaxhighlight>
A string quote character is inserted in a string when two quotes are entered, eg:
<langsyntaxhighlight lang="algol68">STRING stringquote = """I'll be back."" - The Terminator";</langsyntaxhighlight>
A string can span lines, but cannot contain newlines. String literals are concatenated when compiled:
<langsyntaxhighlight lang="algol68">STRING linexyz := "line X;" +
"line Y;" +
"line Z;";</langsyntaxhighlight>
ALGOL 68 uses FORMATs for doing more advanced manipulations.
For example given:
<langsyntaxhighlight lang="algol68">FILE linef; STRING line;
associate(linef, line);</langsyntaxhighlight>
Instead of using preprocessor macros ALGOL 68 can do FORMAT variable replacement within FORMATs at run time.
<langsyntaxhighlight lang="algol68">FORMAT my_symbol = $"SYMBOL"$;
FORMAT foo = $"prefix_"f(my_symbol)"_suffix"$;
putf(linef ,foo);</langsyntaxhighlight>
In <b>standard</b> ALGOL 68 a "book" is a file. A book is composed of pages and lines and
therefore a FORMAT be used for inserting backspaces, space, newlines and newpages into books.
<langsyntaxhighlight lang="algol68">INT pages=100, lines=25, characters=80;
FILE bookf; FLEX[pages]FLEX[lines]FLEX[characters]CHAR book;
associate(bookf, book);
 
# following putf inserts the string " Line 4 indented 5" on page 3 #
putf(bookf, $3p"Page 3"4l5x"Line 4 indented 5"$)</langsyntaxhighlight>
Note: ALGOL 68G does not implement newpage and backspace.
 
=={{header|ALGOL W}}==
<langsyntaxhighlight lang="algolw">begin
% String literals are enclosed in double-quotes in Algol W. %
% There isn't a separate character type but strings of lenghth one can %
Line 154 ⟶ 179:
write( "a\nb" );
 
end.</langsyntaxhighlight>
{{out}}
<pre>
Line 164 ⟶ 189:
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi}}
<syntaxhighlight lang="arm assembly">
<lang ARM Assembly>
/* ARM assembly Raspberry PI */
/* program stringsEx.s */
Line 243 ⟶ 268:
pop {r0,r1,r2,r7,lr} @ restaur registers
bx lr @ return
</syntaxhighlight>
</lang>
 
=={{header|Arturo}}==
 
<langsyntaxhighlight lang="rebol">str: "Hello world"
 
print [str "->" type str]
Line 270 ⟶ 295:
:}
 
print [verbatim "->" type verbatim]</langsyntaxhighlight>
 
{{out}}
Line 286 ⟶ 311:
=={{header|AutoHotkey}}==
unicode
<langsyntaxhighlight AutoHotkeylang="autohotkey">"c" ; character
"text" ; string
hereString = ; with interpolation of %variables%
Line 298 ⟶ 323:
(Comments %
literal %A_Now% ; no interpolation here
)</langsyntaxhighlight>
 
=={{header|AWK}}==
In awk, strings are enclosed using doublequotes.
Characters are just strings of length 1.
<langsyntaxhighlight lang="awk"> c = "x"
str= "hello"
s1 = "abcd" # simple string
s2 = "ab\"cd" # string containing a double quote, escaped with backslash
print s1
print s2 </langsyntaxhighlight>
 
{{out}} Concatenation
<langsyntaxhighlight lang="awk">$ awk 'BEGIN{c="x"; s="hello";s1 = "abcd"; s2 = "ab\"cd"; s=s c; print s; print s1; print s2}'
hellox</langsyntaxhighlight>
 
=={{header|Axe}}==
Character literal:
<syntaxhighlight lang ="axe">'A'</langsyntaxhighlight>
 
String literal:
<langsyntaxhighlight lang="axe">"ABC"</langsyntaxhighlight>
 
Note that string literals are only null-terminated if they are assigned to a variable (e.g. Str1).
Line 329 ⟶ 354:
Here we use the ASCII code for doublequotes to get the characters into a string:
 
<langsyntaxhighlight lang="basic">10 LET Q$=CHR$(34): REM DOUBLEQUOTES
20 LET D$=Q$+Q$: REM A PAIR OF DOUBLEQUOTES
30 LET S$=Q$+"THIS IS A QUOTED STRING"+Q$
40 PRINT Q$;"HELLO";Q$:REM ADD QUOTES DURING OUTPUT</langsyntaxhighlight>
 
''Most'' modern BASIC implementations don't differentiate between characters and strings -- a character is just a string of length 1.
Line 342 ⟶ 367:
Strings can optionally be declared as being a certain length, much like C strings.
 
<langsyntaxhighlight lang="qbasic">DIM c AS STRING * 1, s AS STRING
 
c = "char" 'everything after the first character is silently discarded
s = "string"
PRINT CHR$(34); s; " data "; c; CHR$(34)</langsyntaxhighlight>
 
{{out}}
Line 352 ⟶ 377:
 
==={{header|Applesoft BASIC}}===
<langsyntaxhighlight ApplesoftBasiclang="applesoftbasic">M$ = CHR$(13) : Q$ = CHR$(34)
A$ = "THERE ARE" + M$
A$ = A$ + "NO " + Q$ + "HERE" + Q$ + " STRINGS."
? A$</langsyntaxhighlight>
 
==={{header|IS-BASIC}}===
<langsyntaxhighlight ISlang="is-BASICbasic">100 PRINT CHR$(34)
110 PRINT """"
120 PRINT "This is a ""quoted string""."</langsyntaxhighlight>
 
==={{header|BASIC256}}===
<syntaxhighlight lang="basic256">
<lang BASIC256>
print "Hello, World."
print chr(34); "Hello, World." & chr(34)
print "Tom said," + "'The fox ran away.'"
</syntaxhighlight>
</lang>
 
==={{header|ZX Spectrum Basic}}===
Line 375 ⟶ 400:
by adding an extra pair of doublequotes:
 
<langsyntaxhighlight lang="basic">
10 REM Print some quotes
20 PRINT CHR$(34)
Line 382 ⟶ 407:
50 REM Output the word hello enclosed in doublequotes
60 PRINT """Hello"""
</syntaxhighlight>
</lang>
 
==={{header|uBasic/4tH}}===
 
uBasic/4tH supports the inclusion of doublequotes by allowing the escape <code>\q</code> in almost every string literal.
<syntaxhighlight lang="text">Print "This is a ";Chr(Ord("\q"));"quoted string";Chr(Ord("\q"))
Print "This is a \qquoted string\q"
a := "This is a \qquoted string\q" : Print Show(a)
</syntaxhighlight>
</lang>
 
=={{header|BBC BASIC}}==
Line 397 ⟶ 422:
There is no special representation for a single character (it is just a string of length one).
'Here strings' are not supported.
<langsyntaxhighlight lang="bbcbasic"> PRINT "This is a ""quoted string"""</langsyntaxhighlight>
{{out}}
<pre>
Line 414 ⟶ 439:
which may be pushed using <tt>57*1-</tt>.
Note: since you are pushing the string onto a stack, you usually want to define the string in reverse order so that the first character is on top.
<langsyntaxhighlight lang="befunge">"gnirts">:#,_@</langsyntaxhighlight>
 
=={{header|Bracmat}}==
Line 445 ⟶ 470:
In C, single characters are contained in single quotes.
 
<langsyntaxhighlight lang="c">char ch = 'z';</langsyntaxhighlight>
 
Strings are contained in double quotes.
 
<langsyntaxhighlight lang="c">char str[] = "z";</langsyntaxhighlight>
 
This means that 'z' and "z" are different.
Line 457 ⟶ 482:
 
A string can span lines. Newlines can be added via backslash escapes, and string literals are concatenated when compiled:
<langsyntaxhighlight lang="c">char lines[] = "line 1\n"
"line 2\n"
"line 3\n";</langsyntaxhighlight>
 
C can use library functions such as ''sprintf'' for doing formatted replacement within strings at run time, or preprocessor concatenation to build string literals at compile time:
<langsyntaxhighlight lang="c">#define FOO "prefix_"##MY_SYMBOL##"_suffix"</langsyntaxhighlight>
 
=={{header|C sharp|C#}}==
Line 470 ⟶ 495:
'''C#''' supports verbatim strings. These begin with @" and end with ". Verbatim quotes may contain line breaks and so verbatim strings and here-strings overlap.
 
<langsyntaxhighlight lang="csharp">string path = @"C:\Windows\System32";
string multiline = @"Line 1.
Line 2.
Line 3.";</langsyntaxhighlight>
 
=={{header|C++}}==
Line 481 ⟶ 506:
In C++11, it is also possible to use so-called "Raw Strings":
 
<langsyntaxhighlight lang="cpp">auto strA = R"(this is
a newline-separated
raw string)";
</syntaxhighlight>
</LANG>
 
=={{header|Clojure}}==
Character literals are prefixed by a backslash:
<langsyntaxhighlight lang="lisp">[\h \e \l \l \o] ; a vector of characters
\uXXXX ; where XXXX is some hex Unicode code point
\\ ; the backslash character literal</langsyntaxhighlight>
There are also identifiers for special characters:
<langsyntaxhighlight lang="lisp">\space
\newline
\tab
\formfeed
\return
\backspace</langsyntaxhighlight>
Clojure strings ''are'' Java Strings, and literals are written in the same manner:
<langsyntaxhighlight lang="lisp">"hello world\r\n"</langsyntaxhighlight>
 
=={{header|COBOL}}==
Strings can be enclosed in either single quotes or double quotes. There is no difference between them.
<langsyntaxhighlight lang="cobol">"This is a valid string."
'As is this.'</langsyntaxhighlight>
 
Character literals are strings of two-digit hexadecimal numbers preceded by an x.
<langsyntaxhighlight lang="cobol">X"00" *> Null character
X"48656C6C6F21" *> "Hello!"</langsyntaxhighlight>
 
There are also figurative constants which are equivalent to certain string literals:
<langsyntaxhighlight lang="cobol">HIGH-VALUE HIGH-VALUES *> Equivalent to (a string of) X"FF".
LOW-VALUE LOW-VALUES *> " " X"00".
NULL *> " " X"00".
QUOTE QUOTES *> " " double-quote character.
SPACE SPACES *> " " space.
ZERO ZEROS ZEROES *> " " zero.</langsyntaxhighlight>
 
=={{header|Common Lisp}}==
Character literals are referenced using a hash-backslash notation. Strings are arrays or sequences of characters and can be declared using double-quotes or constructed using other sequence commands.
<langsyntaxhighlight lang="lisp">(let ((colon #\:)
(str "http://www.rosettacode.com/"))
(format t "colon found at position ~d~%" (position colon str)))</langsyntaxhighlight>
 
=={{header|D}}==
Character literals:
 
<langsyntaxhighlight lang="d">char c = 'a';</langsyntaxhighlight>
 
Regular strings support C-style escape sequences.
 
<langsyntaxhighlight lang="d">auto str = "hello"; // UTF-8
auto str2 = "hello"c; // UTF-8
auto str3 = "hello"w; // UTF-16
auto str4 = "hello"d; // UTF-32</langsyntaxhighlight>
 
Literal string (escape sequences are not interpreted):
 
<langsyntaxhighlight lang="d">auto str = `"Hello," he said.`;
auto str2 = r"\n is slash-n";</langsyntaxhighlight>
 
Specified delimiter string:
 
<langsyntaxhighlight lang="d">// Any character is allowed after the first quote;
// the string ends with that same character followed
// by a quote.
auto str = q"$"Hello?" he enquired.$";</langsyntaxhighlight>
 
<langsyntaxhighlight lang="d">// If you include a newline, you get a heredoc string:
auto otherStr = q"EOS
This is part of the string.
So is this.
EOS";</langsyntaxhighlight>
 
Token string:
 
<langsyntaxhighlight lang="d">// The contents of a token string must be valid code fragments.
auto str = q{int i = 5;};
// The contents here isn't a legal token in D, so it's an error:
auto illegal = q{@?};</langsyntaxhighlight>
 
Hex string:
 
<langsyntaxhighlight lang="d">// assigns value 'hello' to str
auto str = x"68 65 6c 6c 6f";</langsyntaxhighlight>
 
=={{header|Delphi}}==
<syntaxhighlight lang="delphi">var
<lang Delphi>var
lChar: Char;
lLine: string;
Line 574 ⟶ 599:
lChar := 'a';
lLine := 'some text';
lMultiLine := 'some text' + #13#10 + 'on two lines';</langsyntaxhighlight>
 
=={{header|DWScript}}==
Strings are either single or double quote delimited, if you want to include the delimiter in the string, you just double it.
Specific character codes (Unicode) can be specified via # (outside of the string).
<langsyntaxhighlight lang="delphi">
const s1 := 'quoted "word" in string';
const s2 := "quoted ""word"" in string"; // sames as s1, shows the doubling of the delimiter
const s2 := 'first line'#13#10'second line'; // CR+LF in the middle
</syntaxhighlight>
</lang>
 
=={{header|Dyalect}}==
Line 589 ⟶ 614:
Strings in Dyalect are double quote delimited (and characters are single quote delimited). Both support escape codes:
 
<langsyntaxhighlight lang="dyalect">let c = '\u0020' //a character
let str = "A string\non several lines!\sAnd you can incorporate expressions: \(c)!"</langsyntaxhighlight>
 
Dyalect also supports multiline strings:
 
<langsyntaxhighlight lang="dyalect">let long_str = <[first line
second line
third line]></langsyntaxhighlight>
 
Multiline strings do not support escape codes.
 
=={{header|Déjà Vu}}==
<langsyntaxhighlight lang="dejavu">local :s "String literal"
local :s2 "newline \n carriage return \r tab \t"
!print "backslash \\ quote \q decimal character \{8364}"</langsyntaxhighlight>
{{out}}
<pre>backslash \ quote " decimal character €</pre>
Line 611 ⟶ 636:
E has three sorts of quotes: ''strings'', ''characters'', and ''quasiliterals''.
 
<langsyntaxhighlight lang="e">'T' # character
"The quick brown fox" # string
`The $kind brown fox` # "simple" quasiliteral
term`the($adjectives*, fox)` # "term" quasiliteral</langsyntaxhighlight>
 
Strings and characters use syntax similar to Java; double and single quotes, respectively, and common backslash escapes.
Line 622 ⟶ 647:
Quasiliterals can be used for strings as well. The third example above is the built-in simple interpolator, which also supports pattern matching. There is also a regular-expression quasi-pattern:
 
<langsyntaxhighlight lang="e">? if ("<abc,def>" =~ `<@a,@b>`) { [a, b] } else { null }
# value: ["abc", "def"]
 
? if (" >abc, def< " =~ rx`\W*(@a\w+)\W+(@b\w+)\W*`) { [a, b] } else { null }
# value: ["abc", "def"]</langsyntaxhighlight>
 
=={{header|EasyLang}}==
Strings are always enclosed in double quotes ("). Unicode is also supported.
<syntaxhighlight lang="easylang">
print "EasyLang"
print "简"
</syntaxhighlight>
 
=={{header|Ela}}==
Ela has both characters:
<langsyntaxhighlight lang="ela">c = 'c'</langsyntaxhighlight>
and strings:
<langsyntaxhighlight lang="ela">str = "Hello, world!"</langsyntaxhighlight>
Both support C-style escape codes:
<langsyntaxhighlight lang="ela">c = '\t'
str = "first line\nsecond line\nthird line"</langsyntaxhighlight>
Also Ela supports verbatim strings with the following syntax:
<langsyntaxhighlight lang="ela">vs = <[This is a
verbatim string]></langsyntaxhighlight>
 
=={{header|Elena}}==
ELENA 4.x :
<langsyntaxhighlight lang="elena">
var c := $65; // character
var s := "some text"; // UTF-8 literal
Line 648 ⟶ 680:
var s2 := "text with ""quotes"" and
two lines";
</syntaxhighlight>
</lang>
 
=={{header|Elixir}}==
===String===
Strings are between double quotes; they're represented internally as utf-8 encoded bytes and support interpolation.
<syntaxhighlight lang="elixir">
<lang Elixir>
IO.puts "Begin String \n============"
str = "string"
str |> is_binary # true
</syntaxhighlight>
</lang>
While internally represented as a sequence of bytes, the String module splits the codepoints into strings.
<syntaxhighlight lang="elixir">
<lang Elixir>
str |> String.codepoints
</syntaxhighlight>
</lang>
The bytes can be accessed by appending a null byte to the string
<syntaxhighlight lang="elixir">
<lang Elixir>
str <> <<0>>
</syntaxhighlight>
</lang>
Strings can be evaluated using <code>?</code> before a character in the command line or in a string, then evaluating the string
<syntaxhighlight lang="elixir">
<lang Elixir>
?a # 97
Code.eval_string("?b") # 98
Code.eval_string("?ł") # 322
</syntaxhighlight>
</lang>
 
===Char Lists===
Char lists are simply lists of characters. Elixir will attempt to convert number values to characters if a string could be formed from the values. Char lists represent characters as single quotes and still allow for interpolation.
<syntaxhighlight lang="elixir">
<lang Elixir>
IO.inspect "Begin Char List \n============="
[115, 116, 114, 105, 110, 103]
ch = "hi"
'string #{ch}'
</syntaxhighlight>
</lang>
Again, since 0 cannot be rendered as a character, adding it to a char list will return the char list
<syntaxhighlight lang="elixir">
<lang Elixir>
'string #{ch}'++[0]
</syntaxhighlight>
</lang>
 
{{out}}
Line 706 ⟶ 738:
The only string literal is a double-quote
 
<langsyntaxhighlight Lisplang="lisp">"This is a string."</langsyntaxhighlight>
 
Backslash gives various special characters similar to C, such as
Line 717 ⟶ 749:
was a separate type.) <code>?</code> is the read syntax.
 
<langsyntaxhighlight Lisplang="lisp">?z ;=> 122
?\n ;=> 10</langsyntaxhighlight>
 
See "Basic Char Syntax" in the elisp manual.
Line 724 ⟶ 756:
=={{header|Erlang}}==
Erlang strings are lists containing integer values within the range of the ASCII or (depending on version and settings) Unicode characters.
<langsyntaxhighlight lang="erlang">
"This is a string".
[$T,$h,$i,$s,$ ,$a,$ ,$s,$t,$r,$i,$n,$g,$,,$ ,$t,$o,$o].
</syntaxhighlight>
</lang>
Characters are represented either as literals (above) or integer values.
<langsyntaxhighlight lang="erlang">
97 == $a. % => true
</syntaxhighlight>
</lang>
With the string syntax, characters can be escaped with \.
<langsyntaxhighlight lang="erlang">
"\"The quick brown fox jumps over the lazy dog.\"".
</syntaxhighlight>
</lang>
 
=={{header|F_Sharp|F#}}==
<langsyntaxhighlight lang="fsharp">
let n= 'N'
let i="Name=\"Nigel Galloway\"\n"
Line 746 ⟶ 778:
let l= """Name="Nigel Galloway"\n"""
printfn "%c\n%s\n%s\n%s\n%s" n i g e l
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 759 ⟶ 791:
=={{header|Factor}}==
A basic character:
<syntaxhighlight lang ="factor">CHAR: a</langsyntaxhighlight>
Characters are Unicode code points (integers in the range <tt>[0-2,097,152]</tt>).
 
<code>CHAR:</code> is a parsing word that takes a literal character, escape code, or Unicode code point name and adds a Unicode code point to the parse tree.
<langsyntaxhighlight lang="factor">CHAR: x ! 120
CHAR: \u000032 ! 50
CHAR: \u{exclamation-mark} ! 33
CHAR: exclamation-mark ! 33
CHAR: ugaritic-letter-samka ! 66450</langsyntaxhighlight>
 
Strings are represented as fixed-size mutable sequences of Unicode code points.
 
A basic string:
<langsyntaxhighlight lang="factor">"Hello, world!"</langsyntaxhighlight>
 
We can take a look under the hood:
<langsyntaxhighlight lang="factor">"Hello, world!" { } like ! { 72 101 108 108 111 44 32 119 111 114 108 100 33 }</langsyntaxhighlight>
 
Both <code>CHAR:</code> and strings support the following escape codes:
Line 828 ⟶ 860:
 
Some examples of strings with escape codes:
<langsyntaxhighlight lang="factor">"Line one\nLine two" print</langsyntaxhighlight>
{{out}}
<pre>
Line 835 ⟶ 867:
</pre>
Putting quotation marks into a string:
<langsyntaxhighlight lang="factor">"\"Hello,\" she said." print</langsyntaxhighlight>
{{out}}
<pre>
Line 841 ⟶ 873:
</pre>
Strings can span multiple lines. Newlines are inserted where they occur in the literal.
<langsyntaxhighlight lang="factor">"2\u{superscript-two} = 4
2\u{superscript-three} = 8
2\u{superscript-four} = 16" print</langsyntaxhighlight>
{{out}}
<pre>
Line 853 ⟶ 885:
 
A verbatim string:
<langsyntaxhighlight lang="factor">USE: multiline
[[ escape codes \t are literal \\ in here
but newlines \u{plus-minus-sign} are still
inserted " for each line the string \" spans.]] print</langsyntaxhighlight>
{{out}}
<pre>
Line 866 ⟶ 898:
 
A here-string:
<langsyntaxhighlight lang="factor">USE: multiline
HEREDOC: END
Everything between the line above
Line 873 ⟶ 905:
is significant.
END
print</langsyntaxhighlight>
{{out}}
<pre>
Line 883 ⟶ 915:
</pre>
<code>STRING:</code> is similar to <code>HEREDOC:</code> except instead of immediately placing the string on the data stack, it defines a word that places the string on the data stack when called.
<langsyntaxhighlight lang="factor">USE: multiline
STRING: random-stuff
ABC
Line 889 ⟶ 921:
"x y z
;
random-stuff print</langsyntaxhighlight>
{{out}}
<pre>
Line 898 ⟶ 930:
 
Finally, the <code>interpolate</code> vocabulary provides support for interpolating lexical variables, dynamic variables, and data stack values into strings.
<langsyntaxhighlight lang="factor">USING: interpolate locals namespaces ;
 
"Sally" "name" set
Line 912 ⟶ 944:
I]
 
]</langsyntaxhighlight>
{{out}}
<pre>
Line 922 ⟶ 954:
=={{header|Forth}}==
In the interpreter:
<langsyntaxhighlight lang="forth">char c emit
s" string" type</langsyntaxhighlight>
In the compiler:
<langsyntaxhighlight lang="forth">: main
[char] c emit
s" string" type ;</langsyntaxhighlight>
Strings may contain any printable character except a double quote, and may not span multiple lines. Strings are done via the word S" which parses ahead for a terminal quote. The space directly after S" is thus not included in the string.
 
Line 933 ⟶ 965:
 
GNU Forth has a prefix syntax for character literals, and another string literal word S\" which allows escaped characters, similar to [[C]].
<langsyntaxhighlight lang="forth">'c emit
s\" hello\nthere!"</langsyntaxhighlight>
 
=={{header|Fortran}}==
First Fortran (1958) did not offer any means to manipulate text except via the H (for Hollerith) code in FORMAT statements of the form nH where n was an integer that counted the ''exact'' numbers of characters following the H, any characters, that constituted the text literal. Miscounts would cause a syntax error, if you were lucky. This would be used for output to annotate the numbers, but consider the following: <langsyntaxhighlight Fortranlang="fortran"> DIMENSION ATWT(12)
PRINT 1
1 FORMAT (12HElement Name,F9.4)
Line 943 ⟶ 975:
READ 1,ATWT(I)
10 PRINT 1,ATWT(I)
END </langsyntaxhighlight>
Evidently, the syntax highlighter here does not recognise the Hollerith style usage. Nor do some compilers, even if in its original home within FORMAT statements.
 
The first PRINT statement writes out a heading, here with lower case letters as an anachronism. Then the loop reads a deck of cards containing the name of an element and its atomic weight into an array ATWT, but the special feature is that the first twelve characters of each card replace the text in the FORMAT statement, and thus the following PRINT statement shows the name of the element followed by its atomic weight as just read.
 
Fortran IV introduced a text literal, specified within apostrophes, with two apostrophes in a row indicating an apostrophe within the text. Later, either an apostrophe or a double quote could be used to start a text string (and the same one must be used to end it) so that if one or the other were desired within a text literal, the other could be used as its delimiters. If both were desired, then there would be no escape from doubling for one. Because spaces are significant within text literals, a long text literal continued on the next line would have the contents of column seven of the continuation line immediately following the contents of column 72 of the continued line - except that (for some compilers reading disc files) if such lines did not extend to column 72 (because trailing spaces were trimmed from the records) rather less text would be defined. So, even though this is in fixed-format (or card image) style, again misinterpreted by the syntax highlighter, <langsyntaxhighlight Fortranlang="fortran"> BLAH = "
1Stuff"</langsyntaxhighlight>
might be the equivalent of only <code>BLAH = "Stuff"</code> instead of defining a text literal with many leading spaces. F90 formalised an opportunity for free-format source files; many compilers had also allowed usage beyond column 72.
 
Within the text literal, any character whatever may be supplied as text grist, according to the encodement recognised by the card reader as this was a fixed-format file - cards have an actual physical size. This applied also to source text held in disc files, as they were either fixed-size records or, for variable-length records, records had a length specification and the record content was not involved. Variable-length records were good for omitting the storage of the trailing spaces on each line, except that the sequence numbers were at the end of the line! In this case they might be omitted (unlike a card deck, a disc file's records are not going to be dropped) or there may be special provision for them to be at the start of each line with the source text's column one staring in column nine of the record. But, for the likes of paper tape, the question "How long is a record?" has no natural answer, and record endings were marked by a special symbol. Such a symbol (or symbol sequence) could not appear within a record, such as within a text literal and be taken as a part of the text. This style has been followed by the ASCII world, with variously CR, CRLF, LFCR and CR sequences being used to mark end-of-record. Such characters cannot be placed within a text literal, but the CHAR(n) function makes them available in character expressions. Some compilers however corrupt the "literal" nature of text ''literals'' by allowing escape sequences to do so, usually in the style popularised by C, thus \n, and consequently, \\ should a single \ be desired.
 
Some examples, supposing that TEXT is a CHARACTER variable. <langsyntaxhighlight Fortranlang="fortran"> TEXT = 'That''s right!' !Only apostrophes as delimiters. Doubling required.
TEXT = "That's right!" !Chose quotes, so that apostrophes may be used freely.
TEXT = "He said ""That's right!""" !Give in, and use quotes for a "quoted string" source style.
TEXT = 'He said "That''s right!"' !Though one may dabble in inconsistency.
TEXT = 23HHe said "That's right!" !Some later compilers allowed Hollerith to escape from FORMAT. </langsyntaxhighlight>
 
A similar syntax enables the specification of hexadecimal, octal or binary sequences, as in <code>X = Z"01FE"</code> for hexadecimal (the "H" code already being used for "Hollerith" even if the H-usage is not supported by the compiler) but this is for numerical values, not text strings. While one could mess about with EQUIVALENCE statements, numbers fill up from the right while text strings fill from the left and there would be "endian" issues as well, so it is probably not worth the bother. Just use the CHAR function in an expression, as in
<langsyntaxhighlight Fortranlang="fortran"> TEXT = "That's"//CHAR(10)//"right!" !For an ASCII linefeed (or newline) character.</langsyntaxhighlight>
Which may or may not be acted upon by the output device. A lineprinter probably would ignore a linefeed character but a teletype would not - it would roll the printing carriage one line up without returning to the column one position, thus the usage LFCR (or CRLF) to add the carriage return action. Some systems regard the LF as also implying a CR and for these the notation \n for "newline" is mnemonic even though there is no "newline" character code in ASCII - though there is in EBCDIC. Display screens do not handle glyph construction via overprinting though teletypes (and lineprinters) do. Similarly, a display screen may or may not start a new screen with a formfeed character and a lineprinter won't start a new page - at least if attached to a mainframe computer.
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight lang="freebasic">
Print "Hello, World."
Print Chr(34); "Hello, World." & Chr(34)
Line 971 ⟶ 1,003:
Print "Tom said, ""The fox ran away."""
Print "Tom said," + "'The fox ran away.'"
</syntaxhighlight>
</lang>
 
=={{header|friendly interactive shell}}==
<langsyntaxhighlight lang="fishshell">echo Quotes are optional in most cases.
echo
echo 'But they are when using either of these characters (or whitespace):'
Line 983 ⟶ 1,015:
echo
set something variable
echo "Double quotes interpolates \\, \" and \$ sequences and $something accesses."</langsyntaxhighlight>
 
=={{header|FurryScript}}==
Line 994 ⟶ 1,026:
 
All three kinds are string literals.
 
=={{header|FutureBasic}}==
<syntaxhighlight lang="futurebasic">
@"Hello, world!"
</syntaxhighlight>
 
=={{header|GAP}}==
<langsyntaxhighlight lang="gap">IsChar('a');
# true
IsString("abc");
Line 1,003 ⟶ 1,040:
# false
IsChar("a");
# false</langsyntaxhighlight>
 
=={{header|gecho}}==
<syntaxhighlight lang ="gecho">'a outascii</langsyntaxhighlight>
Just one character.
<syntaxhighlight lang ="gecho">'yo...dawg. print</langsyntaxhighlight>
A string.
 
Line 1,016 ⟶ 1,053:
In Go, character literals are called "rune literals" and can be any single valid Unicode code point.
They are written as an integer value or as text within single quotes.
<langsyntaxhighlight lang="go">ch := 'z'
ch = 122 // or 0x7a or 0172 or any other integer literal
ch = '\x7a' // \x{2*hex}
ch = '\u007a' // \u{4*hex}
ch = '\U0000007a' // \U{8*hex}
ch = '\172' // \{3*octal}</langsyntaxhighlight>
 
A rune literal results in an untyped integer.
When used in a typed constant or stored in a variable, usually the type is either <code>byte</code> or <code>rune</code> to distinguish character values from integer values.
These are aliases for <code>uint8</code> and <code>int32</code> respectively, but like other integer types in Go, they are distinct and require an explicate cast.
<langsyntaxhighlight lang="go">ch := 'z' // ch is type rune (an int32 type)
var r rune = 'z' // r is type rune
var b byte = 'z' // b is type byte (an uint8 type)
Line 1,039 ⟶ 1,076:
r = rune(c)
i = int(c)
b3 := c // equivalent to b</langsyntaxhighlight>
 
Strings literals are are either interpreted or raw.
Line 1,045 ⟶ 1,082:
Interpreted string literals are contained in double quotes.
They may not contain newlines but may contain backslash escapes.
<langsyntaxhighlight lang="go">str := "z"
str = "\u007a"
str = "two\nlines"</langsyntaxhighlight>
 
This means that 'z' and "z" are different. The former is a character while the latter is a string.
Line 1,053 ⟶ 1,090:
Unicode may be included in the string literals.
They will be encoded in UTF-8.
<langsyntaxhighlight lang="go">str := "日本語"</langsyntaxhighlight>
 
Raw string literals are contained within back quotes.
They may contain any character except a back quote.
Backslashes have no special meaning.
<langsyntaxhighlight lang="go">`\n` == "\\n"</langsyntaxhighlight>
 
Raw string literals, unlike regular string literals, may also span multiple lines.
The newline is included in the string (but not any <code>'\r'</code> characters):
<langsyntaxhighlight lang="go">`abc
def` == "abc\ndef", // never "abc\r\ndef" even if the source file contains CR+LF line endings</langsyntaxhighlight>
 
Go raw string literals serve the purpose of here-strings in other languages.
Line 1,072 ⟶ 1,109:
 
In [[Groovy]], unlike in [[Java]], a String literal is delimited with ''single quotes'' (apostrophes(')).
<langsyntaxhighlight lang="groovy">def string = 'Able was I'</langsyntaxhighlight>
 
There is a ''double quote'' (quotation mark(")) delimited syntax in Groovy, but it represents an expression construct called a ''GString'' (I know, I know). Inside of a GString, sub-expression substitution of the form ${''subexpression''} may take place. Thus the following results:
<langsyntaxhighlight lang="groovy">def gString = "${string} ere I saw Elba"
 
println gString
 
//Outputs:
//Able was I ere I saw Elba</langsyntaxhighlight>
 
[[UNIX Shell]] command line users should recognize these forms of syntax as ''strong'' ('-delimited) and ''weak'' ("-delimited) quoting.
And like [[UNIX Shell]] weak quoting syntax, the evaluated subexpression part of the GString syntax loses its special meaning when preceded by a backslash (\):
 
<langsyntaxhighlight lang="groovy">def gString2 = "1 + 1 = ${1 + 1}"
assert gString2 == '1 + 1 = 2'
 
def gString3 = "1 + 1 = \${1 + 1}"
assert gString3 == '1 + 1 = ${1 + 1}'</langsyntaxhighlight>
 
Groovy also supports multi-line String literals and multi-line GString expressions.
 
<langsyntaxhighlight lang="groovy">def multiLineString = '''
A man
A plan
Line 1,112 ⟶ 1,149:
//A canal:
//Panama!
//</langsyntaxhighlight>
 
[[UNIX Shell]] programmers should recognize these forms of syntax as similar in function to the strong and weak forms of ''Here Document'' syntax.
Line 1,122 ⟶ 1,159:
However, [[Groovy]] has a special GString syntax that uses slash (/) as a GString delimiter rather that quote ("). In this special syntax, most backslash usages that would require a double backslash in a regular String or GString require only a single backslash (\). This does not create a "regular expression object" (there is not such a thing in [[Groovy]]); however, it does evaluate to form a "regular expression ready" String, as demonstrated in the following:
 
<langsyntaxhighlight lang="groovy">def regexString = /(\[[Tt]itle\]|\[[Ss]ubject\])${10 * 5}/
 
assert regexString == '(\\[[Tt]itle\\]|\\[[Ss]ubject\\])50'</langsyntaxhighlight>
 
[[Javascript]] users (and others) will recognize the roots of this "regex-ready" syntax as a feature in their own language.
Line 1,130 ⟶ 1,167:
Since apostrophe is used to delimit String literals, that delimiter syntax is not available, as it is in [[Java]], to denote single character literals (type char or Character). However, single character string literals can be converted to character literals by casting. Shown in the examples below are casting using the ''as'' operator, Java-style parenthetical casting, and forced coercion in the intialization of a variable of type char or Character.
 
<langsyntaxhighlight lang="groovy">assert 'a' instanceof String
assert ('a' as char) instanceof Character
assert ((char)'a') instanceof Character
Line 1,137 ⟶ 1,174:
assert x instanceof Character
Character y = 'b'
assert y instanceof Character && (x+1 == y)</langsyntaxhighlight>
 
As in [[Java]], backslash is also used to mask a string delimiter. Thus the following two assignments represent strings containing a single quote and a single apostrophe respectively
 
<langsyntaxhighlight lang="groovy">def quote = "\""
def apostrophe = '\''</langsyntaxhighlight>
 
Of course, if you are not using GString subexpression evaluation, you can just use apostrophe delimiters to contain a quote, or quote delimiters to contain an apostrophe.
 
<langsyntaxhighlight lang="groovy">def quote2 = '"'
def apostrophe2 = "'"
assert quote == quote2
assert apostrophe == apostrophe2</langsyntaxhighlight>
 
=={{header|Haskell}}==
Line 1,158 ⟶ 1,195:
Strings may be split across lines, even indented, using the 'gap' syntax:
 
<langsyntaxhighlight lang="haskell">"abcdef" == "abc\
\def"
 
"abc\ndef" == "abc\n\
\def"</langsyntaxhighlight>
 
You can also use <tt>\&amp;</tt> which expands into nothing (but can be useful to interrupt another escape sequence).
Line 1,172 ⟶ 1,209:
using [http://hackage.haskell.org/package/raw-strings-qq-1.0.2/docs/Text-RawString-QQ.html raw-strings-qq] package:
 
<langsyntaxhighlight lang="haskell">
{-# LANGUAGE QuasiQuotes #-}
import Text.RawString.QQ
Line 1,178 ⟶ 1,215:
"abc\ndef" == [r|abc
def|]
</syntaxhighlight>
</lang>
 
=={{header|HicEst}}==
HicEst makes no distinction between single characters and strings. One can use single quotes, or double quotes, or most non-standard characters.
<langsyntaxhighlight lang="hicest">CHARACTER c1='A', c2="B", c3=&C&
CHARACTER str1='single quotes', str2="double quotes", str3*100
 
str3 = % delimit "Nested 'strings' " if needed % </langsyntaxhighlight>
A null character CHAR(0) is printed as " ", displayed as "." in dialogs, but ends the string in Windows controls such as StatusBar or ClipBoard
<langsyntaxhighlight lang="hicest">str3 = 'a string' // CHAR(0) // "may contain" // $CRLF // ~ any character ~ </langsyntaxhighlight>
Named literal constants in HicEst:
<langsyntaxhighlight lang="hicest">$TAB == CHAR(9) ! evaluates to 1 (true)
$LF == CHAR(10)
$CR == CHAR(13)
$CRLF == CHAR(13) // CHAR(10) ! concatenation</langsyntaxhighlight>
 
=={{header|Icon}} and {{header|Unicon}}==
Below is a little program to demonstrate string literals.
<langsyntaxhighlight Iconlang="icon">procedure main()
 
# strings are variable length are not NUL terminated
Line 1,209 ⟶ 1,246:
every x := c1|s1|s2 do # show them
write(" size=",*x,", type=", type(x),", value=", image(x))
end</langsyntaxhighlight>
 
{{out}}
Line 1,220 ⟶ 1,257:
The single and double quotes are fairly interchangeable allowing one to use whichever isn't to be quoted (though single-quotes seem more well-behaved around integers in strings). Thus the following are both valid character-constant assignments:
 
<langsyntaxhighlight lang="idl">a = " that's a string "
b = ' a "string" is this '</langsyntaxhighlight>
 
In a pinch, a character constant doesn't absolutely have to be terminated, rendering the following valid:
 
<langsyntaxhighlight lang="idl">a = " that's a string</langsyntaxhighlight>
 
Duplicating either of them quotes them. Thus the following contains three single quotes and no double-quotes:
 
<langsyntaxhighlight lang="idl">a = ' that''s a string
print,a
;==> that's a string</langsyntaxhighlight>
 
Things in quotes are not expanded. To get to the content of a variable, leave it unquoted:
 
<langsyntaxhighlight lang="idl">b = 'hello'
a = b+' world
print,a
;==> hello world</langsyntaxhighlight>
 
Single-quoted strings of valid hex or octal digits will be expanded if followed by "x" or "o":
 
<langsyntaxhighlight lang="idl">print,'777'x
;==> 1911
print,'777'o
;==> 511
print,'777'
;==> 777</langsyntaxhighlight>
 
so will be unterminated double-quoted strings if they represent valid octal numbers:
 
<langsyntaxhighlight lang="idl">print,"777
;==> 511
print,"877
;==> 877</langsyntaxhighlight>
 
Note that this renders the following false (common trip-up for IDL newbies):
 
<langsyntaxhighlight lang="idl">a = "0"
;==> Syntax error.</langsyntaxhighlight>
 
...because the number zero indicates that an octal number follows, but the second double-quote is not a valid octal digit.
Line 1,265 ⟶ 1,302:
Byte-arrays that are converted into strings are converted to the ascii-characters represented by the bytes. E.g.
 
<langsyntaxhighlight lang="idl">crlf = string([13b,10b])</langsyntaxhighlight>
 
=={{header|Inform 7}}==
String literals are enclosed in double quotes. These may include raw line breaks, or expressions to be substituted enclosed in square brackets.
 
<langsyntaxhighlight lang="inform7">Home is a room. The description is "This is where you live...
 
...with your [number of animals in Home] pet[s]."</langsyntaxhighlight>
 
Single quotes in a string are translated to double quotes when they occur outside of a word: the string literal <langsyntaxhighlight lang="inform7">"'That's nice,' said the captain."</langsyntaxhighlight>
will print as
<pre>"That's nice," said the captain.</pre>
Line 1,280 ⟶ 1,317:
Raw linebreak must be double -- single linebreaks will be collapsed unless explicitly marked with `[line break]`. In addition, leading whitespace is stripped from each line. This:
 
<langsyntaxhighlight lang="inform7">"
\
\
\
\"</langsyntaxhighlight>
will print as:
<pre>\\\\
Line 1,290 ⟶ 1,327:
 
while this:
<langsyntaxhighlight lang="inform7">"
[line break]\
[line break] \
[line break] \
[line break] \"</langsyntaxhighlight>
will insert line breaks and preserve the following whitespace, printing as:
<pre>
Line 1,311 ⟶ 1,348:
Examples:
 
<langsyntaxhighlight lang="j">'x' NB. Scalar character
'string' NB. List of characters, i.e. a string
'can''t get simpler' NB. Embedded single-quote</langsyntaxhighlight>
 
Like VB, J can include newlines and other special characters in literals with concatentation. Also like VB, J comes with certain constants predefined for some characters:
 
<langsyntaxhighlight lang="j">'Here is line 1',LF,'and line two'
 
'On a mac, you need',CR,'a carriage return'
Line 1,323 ⟶ 1,360:
'And on windows, ',CRLF,'you need both'
 
TAB,TAB,TAB,'Everyone loves tabs!'</langsyntaxhighlight>
 
These constants are simply names assigned to selections from the ASCII alphabet. That is, the standard library executes lines like this:
 
<langsyntaxhighlight lang="j">CR =: 13 { a.
LF =: 10 { a.
CRLF =: CR,LF NB. Or just 10 13 { a.
TAB =: 9 { a.</langsyntaxhighlight>
 
Since these constants are nothing special, it can be seen that any variable can be similarly included in a literal:
 
<langsyntaxhighlight lang="j">NAME =: 'John Q. Public'
'Hello, ',NAME,' you may have already won $1,000,000'</langsyntaxhighlight>
 
For multiline literals, you may define an explicit noun, which is terminated by a lone <code>)</code>
 
<langsyntaxhighlight lang="j">template =: noun define
Hello, NAME.
 
Line 1,347 ⟶ 1,384:
To collect your winnings, please send $PAYMENT
to ADDRESS.
)</langsyntaxhighlight>
 
Simple substitution is most easily effected by using loading a standard script:
 
<langsyntaxhighlight lang="j">load 'strings'
 
name =: 'John Q. Public'
Line 1,362 ⟶ 1,399:
sources =: ":&.> name;shyster;amount;payment;address
 
message =: template rplc targets,.sources</langsyntaxhighlight>
While C-like interpolation can be effected with another:
 
<langsyntaxhighlight lang="j"> load 'printf'
'This should look %d%% familiar \nto programmers of %s.' sprintf 99;'C'
This should look 99% familiar
to programmers of C.</langsyntaxhighlight>
 
=={{header|Java}}==
 
<langsyntaxhighlight lang="java"> char a = 'a'; // prints as: a
String b = "abc"; // prints as: abc
char doubleQuote = '"'; // prints as: "
char singleQuote = '\''; // prints as: '
String singleQuotes = "''"; // prints as: ''
String doubleQuotes = "\"\""; // prints as: ""</langsyntaxhighlight>
 
Null characters ('\0') are printed as spaces in Java. They will not terminate a String as they would in C or C++. So, the String "this \0is \0a \0test" will print like this:
Line 1,391 ⟶ 1,428:
Unicode characters can be entered as literals or as 4 character hexadecimal escapes. The following expressions are equivalent:
 
<langsyntaxhighlight JavaScriptlang="javascript">(function () {
return "αβγδ 中间来点中文 🐫 אבגד"
})();
Line 1,398 ⟶ 1,435:
(function() {
return "\u03b1\u03b2\u03b3\u03b4 \u4e2d\u95f4\u6765\u70b9\u4e2d\u6587 \ud83d\udc2b \u05d0\u05d1\u05d2\u05d3";
})();</langsyntaxhighlight>
 
Note that in the case of the Emoji character above, where more than 4 hexadecimal characters are needed, ES5 requires us to separately write a pair of surrogate halves, and the '''String.length''' of such characters is 2.
Line 1,407 ⟶ 1,444:
ES6 also introduces template literals, which are string literals allowing embedded expressions. You can use multi-line strings and string interpolation features with them. Template literals are enclosed by the backtick (<code>` `</code>) (grave accent) character instead of double or single quotes.
 
<langsyntaxhighlight JavaScriptlang="javascript">const multiLine = `string text line 1
string text line 2`
const expression = `expressions are also supported, using \$\{\}: ${multiLine}`
 
console.log(expression)</langsyntaxhighlight>
{{out}}
<pre>
Line 1,435 ⟶ 1,472:
=={{header|Julia}}==
Concatenation:
<langsyntaxhighlight lang="julia">greet = "Hello"
whom = "world"
greet * ", " * whom * "."</langsyntaxhighlight>
 
Interpolation:
<langsyntaxhighlight lang="julia">"$greet, $whom."</langsyntaxhighlight>
 
Both will output:
<syntaxhighlight lang ="julia">Hello, world.</langsyntaxhighlight>
 
Triple-quoted strings
<langsyntaxhighlight lang="julia">str = """Hello,
world.
"""
 
print(str)</langsyntaxhighlight>
 
Will output:
 
<langsyntaxhighlight lang="julia">Hello,
world.</langsyntaxhighlight>
 
=={{header|Kotlin}}==
Line 1,468 ⟶ 1,505:
 
Here are some examples of these :
<langsyntaxhighlight lang="scala">// version 1.0.6
 
fun main(args: Array<String>) {
Line 1,493 ⟶ 1,530:
println(rsl)
println(msl)
}</langsyntaxhighlight>
 
{{out}}
Line 1,523 ⟶ 1,560:
 
===Quoted Strings===
<langsyntaxhighlight Lassolang="lasso">'I\'m a 2" string\n'
"I'm a 2\" string\n"</langsyntaxhighlight>
 
===Ticked Strings===
In the below example here \n would not be a line feed, it represents a backslash and n.
<langsyntaxhighlight Lassolang="lasso">`I'm also a 2" string\n`</langsyntaxhighlight>
 
=={{header|LaTeX}}==
Line 1,538 ⟶ 1,575:
For example, to typeset 'a' is for "apple" in LaTeX, one would type
 
<langsyntaxhighlight lang="latex">\documentclass{minimal}
\begin{document}
`a' is for ``apple"
\end{document}</langsyntaxhighlight>
 
One common mistake is to use the same symbol for opening and closing quotes,
Line 1,549 ⟶ 1,586:
 
=={{header|Liberty BASIC}}==
<syntaxhighlight lang="lb">
<lang lb>
'Liberty BASIC does not support escape characters within literal strings.
print "Quotation mark:"
Line 1,559 ⟶ 1,596:
'Print literal string displaying quotation marks.
print chr$(34) + "Hello, World." + chr$(34)
</syntaxhighlight>
</lang>
 
=={{header|Lingo}}==
* Lingo only supports single quotes for string literals. Single quotes inside string literals have to be replaced by "&QUOTE&":
<langsyntaxhighlight lang="lingo">str = "Hello "&QUOTE&"world!"&QUOTE
put str
-- "Hello "world!""</langsyntaxhighlight>
 
* Lingo does not support heredoc syntax, but only multiline string literals by using the line continuation character "\":
<langsyntaxhighlight lang="lingo">str = "This is the first line.\
This is the second line.\
This is the third line."</langsyntaxhighlight>
 
* Lingo does not support automatic variable expansion in strings. But the function value() can be used to expand template strings in the current context:
<langsyntaxhighlight lang="lingo">template = QUOTE&"Milliseconds since last reboot: "&QUOTE&"&_system.milliseconds"
 
-- expand template in current context
str = value(template)
put str
-- "Milliseconds since last reboot: 20077664"</langsyntaxhighlight>
 
=={{header|Lisaac}}==
Characters:
<langsyntaxhighlight Lisaaclang="lisaac">c1 := 'a';
c2 := '\n'; // newline
c3 := '\''; // quote
Line 1,588 ⟶ 1,625:
c5 := '\10\'; // decimal
c6 := '\0Ah\'; // hexadecimal
c7 := '\10010110b\'; // binary</langsyntaxhighlight>
Strings:
<langsyntaxhighlight Lisaaclang="lisaac">s1 := "this is a\nsample"; // newline
s2 := "\""; // double quote
s3 := "abc\
\xyz"; // "abcxyz", cut the gap</langsyntaxhighlight>
 
=={{header|LiveCode}}==
LiveCode has only one string representation using quotes. Characters are accessed through chunk expressions, specifically char. Some special characters are built-in constants such as quote, space, comma, cr, return. There is no support for escaping characters or multiline literals.<langsyntaxhighlight LiveCodelang="livecode">put "Literal string" -- Literal string
put char 1 of "Literal string" -- L
put char 1 to 7 of "Literal string" -- Literal
put word 1 of "Literal string" -- Literal
put quote & "string" & quote -- "string"</langsyntaxhighlight>
 
=={{header|Logo}}==
Logo does not have a string or character type that is separate from its symbol type ("word"). A literal word is specified by prefixing a double-quote character.
Reserved and delimiting characters, ()[];~+-*/\=<>| and newline, may be used if preceded by a backslash. Alternatively, the string may be wrapped in vertical bars, in which case only backslash and vertical bar need be escaped.
<langsyntaxhighlight lang="logo">print "Hello\,\ world
print "|Hello, world|</langsyntaxhighlight>
 
=={{header|Lua}}==
Line 1,614 ⟶ 1,651:
to be embedded within a string enclosed with the other symbol.
 
<langsyntaxhighlight lang="lua">singlequotestring = 'can contain "double quotes"'
doublequotestring = "can contain 'single quotes'"
longstring = [[can contain
newlines]]
longstring2 = [==[ can contain [[ other ]=] longstring " and ' string [===[ qualifiers]==]</langsyntaxhighlight>
 
Note that interpolation of variables names within a string does not take place.
Line 1,625 ⟶ 1,662:
 
=={{header|M2000 Interpreter}}==
<syntaxhighlight lang="m2000 interpreter">
<lang M2000 Interpreter>
Print "Hello {World}"
Print {Hello "World"}
Line 1,633 ⟶ 1,670:
Print """Hello There"""={"Hello There"}
Print Quote$("Hello There")={"Hello There"}
</syntaxhighlight>
</lang>
 
=={{header|M4}}==
The quoting characters are <tt>`</tt> and <tt>'</tt>,
but can be changed by the <code>changequote</code> macro:
<syntaxhighlight lang ="m4">`this is quoted string'</langsyntaxhighlight>
<langsyntaxhighlight lang="m4">changequote(`[',`]')dnl
[this is a quoted string]</langsyntaxhighlight>
 
=={{header|Maple}}==
There is no separate character type in Maple; a character is just a string of length equal to 1.
<syntaxhighlight lang="maple">
<lang Maple>
> "foobar";
"foobar"
Line 1,654 ⟶ 1,691:
> "c"; # a character
"c"
</syntaxhighlight>
</lang>
Note that adjacent strings in the input (separated only by white-space) are concatenated automatically by the parser.
<syntaxhighlight lang="maple">
<lang Maple>
> "foo" "bar";
"foobar"
</syntaxhighlight>
</lang>
Since variable names are not distinguished lexically from other text (such as by using a "$" prefix, as in some shells), Maple does not do any kind of variable expansion inside strings.
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
 
<langsyntaxhighlight Mathematicalang="mathematica">There is no character type in Mathematica, only string type.
"c"; // String (result: "c")
"\n"; // String (result: newline character)</langsyntaxhighlight>
 
=={{header|MATLAB}}==
Strings start and end with single quotes, the escape sequence for a single quote with in a string, is the use of two consequtive single quotes
<syntaxhighlight lang="matlab">
<lang Matlab>
s1 = 'abcd' % simple string
s2 = 'ab''cd' % string containing a single quote
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,683 ⟶ 1,720:
 
=={{header|Maxima}}==
<langsyntaxhighlight lang="maxima">/* A string */
"The quick brown fox jumps over the lazy dog";
 
/* A character - just a one character string */
"a"</langsyntaxhighlight>
 
=={{header|Metafont}}==
Line 1,693 ⟶ 1,730:
In Metafont there's no difference between a single character string and a single character. Moreover, the double quotes (which delimites a string) cannot be inserted directly into a string; for this reason, the basic Metafont macro set defines
 
<langsyntaxhighlight lang="metafont">string ditto; ditto = char 34;</langsyntaxhighlight>
 
i.e. a string which is the single character having ASCII code 34 ("). Macro or variables expansion inside a string block is inhibited.
 
<langsyntaxhighlight lang="metafont">message "You've said: " & ditto & "Good bye!" & ditto & ".";</langsyntaxhighlight>
 
=={{header|ML/I}}==
Line 1,703 ⟶ 1,740:
ML/I treats all input and programs as character streams. Strings do not have to be quoted; they are taken 'as is'. If one wishes to ensure that a string is taken literally (i.e. not evaluated), it is enclosed in ''literal brackets''. There are no predefined literal brackets; the programmer can define anything suitable, usually by setting up a ''matched text skip'', using the MCSKIP operation macro. By convention, the pair <> is used for literal brackets, unless this clashes in the case of a particular processing task.
===Input===
<langsyntaxhighlight MLlang="ml/Ii">MCSKIP "WITH" NL
"" Literals/String
MCINS %.
Line 1,713 ⟶ 1,750:
"" evaluated.
This is the first mention of Bob
<and here we mention Bob again></langsyntaxhighlight>
 
===Output===
<langsyntaxhighlight MLlang="ml/Ii">This is the first mention of Alice
and here we mention Bob again</langsyntaxhighlight>
 
=={{header|MIPS Assembly}}==
{{works with|https://github.com/Kingcom/armips ARMIPS}}
Strings are specified using single or double quotes. The assembler will convert each letter of the string into its ASCII equivalent during the assembly process. Therefore, all of the following statements have the same effect:
 
<syntaxhighlight lang="mips">li a0,'A'
li a0,0x41
li a0,65
li a0,0b01000001</syntaxhighlight>
 
This means that you can do compile-time "character addition/subtraction" and the like, to better communicate <i>why</i> your code is doing what it's doing.
<syntaxhighlight lang="mips">;print 0 if $t0 if even, 1 if $t0 is odd
 
andi t0,t0,1 ;clear all but bit 1. This tells us if $t0 is odd or even.
addiu t0,"0" ;add ASCII 0 (0x30) to $t0
jal PrintChar ;implementation-defined print routine that prints the ASCII value of $t0 to the screen.</syntaxhighlight>
 
ASCII strings use <code>.byte</code> for declaration. Control codes are implemented by strategically placing commas and their numeric values <i>outside of quotation marks,</i> like so:
 
<syntaxhighlight lang="mips">MyString:
.byte "Hello World!",13,10,0 ;carriage return, line feed, null terminator
.align 4 ;pads to the next 4 byte-boundary</syntaxhighlight>
 
As with most RISC CPUs, alignment is a must, especially when working with ASCII strings. ARMIPS doesn't provide alignment automatically, but it does have the <code>.align</code> directive to provide sufficient padding (if necessary) to ensure everything after your string is properly aligned. If it was already aligned, the directive will do nothing rather than burn the bytes, meaning that you don't have to take the time to count how long your string is. There's no memory wasted by dropping a <code>.align</code> after every piece of byte-length data, so might as well.
 
 
=={{header|Modula-3}}==
Characters in Modula-3 use single quotes.
<langsyntaxhighlight lang="modula3">VAR char: CHAR := 'a';</langsyntaxhighlight>
Strings in Modula-3 use double quotes.
<langsyntaxhighlight lang="modula3">VAR str: TEXT := "foo";</langsyntaxhighlight>
<code>TEXT</code> is the string type in Modula-3.
Characters can be stored in an array and then converted to type TEXT using the function <code>Text.FromChars</code> in the <code>Text</code> module.
 
Strings (of type <code>TEXT</code>) can be converted into an array of characters using the function <code>Text.SetChars</code>.
<langsyntaxhighlight lang="modula3">VAR str: TEXT := "Foo";
VAR chrarray: ARRAY [1..3] OF CHAR;
 
Text.SetChars(chrarray, str);
(* chrarray now has the value ['F', 'o', 'o'] *)</langsyntaxhighlight>
 
=={{header|MUMPS}}==
Line 1,758 ⟶ 1,820:
Nemerle also has a recursive string literal, enclosed within <# #>, that is the same as a literal string, except that it allows nesting of strings.
 
<langsyntaxhighlight Nemerlelang="nemerle">'a' // character literal
'\n' // also a character literal
"foo\nbar" // string literal
Line 1,769 ⟶ 1,831:
like "\n".#> // same as "This string type can contain any symbols including \"\nand new lines. "
// + "It does not\nsupport escape codes\nlike \"\\n\"."
<#Test <# Inner #> end#> // same as "Test <# Inner #> end" (i.e. this string type support recursion.</langsyntaxhighlight>
 
=={{header|Nim}}==
<langsyntaxhighlight lang="nim">var c = 'c'
var s = "foobar"
var l = """foobar
Line 1,778 ⟶ 1,840:
more test here"""
 
var f = r"C:\texts\text.txt" # Raw string</langsyntaxhighlight>
 
=={{header|OASYS Assembler}}==
Line 1,795 ⟶ 1,857:
=={{header|Objective-C}}==
The same as C, with the addition of the new string literal
<langsyntaxhighlight lang="objc">@"Hello, world!"</langsyntaxhighlight>
which represents a pointer to a statically allocated string object, of type <tt>NSString *</tt>, similar to string literals in Java. You can use this literal like other object pointers, e.g. call methods on it <code>[@"Hello, world!" uppercaseString]</code>.
 
Line 1,801 ⟶ 1,863:
 
Characters are contained in single quotes:
<langsyntaxhighlight lang="ocaml"># 'a';;
- : char = 'a'</langsyntaxhighlight>
 
Strings are contained in double quotes:
<langsyntaxhighlight lang="ocaml"># "Hello world";;
- : string = "Hello world"</langsyntaxhighlight>
 
Strings may be split across lines and concatenated using the following syntax: (the newline and any blanks at the beginning of the second line is ignored)
<langsyntaxhighlight lang="ocaml"># "abc\
def";;
- : string = "abcdef"</langsyntaxhighlight>
 
If the above syntax is not used then any newlines and whitespace are included in the string:
<langsyntaxhighlight lang="ocaml"># "abc
def";;
- : string = "abc\n def"</langsyntaxhighlight>
 
Another syntax to include verbatim text:
<langsyntaxhighlight lang="ocaml"># {id|
Hello World!
|id} ;;
- : string = "\n Hello World!\n"</langsyntaxhighlight>
 
=={{header|Octave}}==
Line 1,828 ⟶ 1,890:
In order to maintain compatible with Matlab,
it is recommended to use single quotes for defining strings.
<syntaxhighlight lang="octave">
<lang Octave>
s1 = 'abcd' % simple string
s2 = 'ab''cd' % string containing a single quote using an escaped single quote
Line 1,834 ⟶ 1,896:
s4 = "ab'cd" % string containing a single quote
s5 = "ab""cd" % string containing a double quote using an escaped double quote
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,855 ⟶ 1,917:
There is no character type : characters are integers representing unicode value of the character.
 
<syntaxhighlight lang="oforth">'a'
<lang Oforth>'a'
'\''
"abcd"
"ab\ncd"
"ab\" and \" cd"</langsyntaxhighlight>
 
=={{header|Oz}}==
<langsyntaxhighlight lang="oz">declare
Digit0 = &0 %% the character '0'
NewLine = &\n %% a character with special representation
Line 1,876 ⟶ 1,938:
MyName = "Peter"
MyAge = 8
{System.showInfo MyName # " is " # MyAge # " years old."}</langsyntaxhighlight>
 
=={{header|PARI/GP}}==
Line 1,899 ⟶ 1,961:
Double-quotes allows you to interpolate variables and escape sequences, while single-quotes do not.
 
<langsyntaxhighlight lang="perl">'c'; # character
'hello'; # these two strings are the same
"hello";
Line 1,919 ⟶ 1,981:
<<'END'; # Here-Document like single-quoted
Same as above, but no interpolation of $variables.
END</langsyntaxhighlight>
 
=={{header|Phix}}==
Line 1,925 ⟶ 1,987:
single character literals (incidentally entirely equivalient to their ascii value) require single quotes, eg
 
<!--<langsyntaxhighlight Phixlang="phix">-->
<span style="color: #008080;">constant</span> <span style="color: #000000;">UPPERCASEJ</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'J'</span> <span style="color: #000080;font-style:italic;">-- equivalent to 74</span>
<!--</langsyntaxhighlight>-->
 
string literals use double quotes, eg
 
<!--<langsyntaxhighlight Phixlang="phix">-->
<span style="color: #008080;">constant</span> <span style="color: #000000;">hw</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"Hello World!"</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">mt</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">""</span> <span style="color: #000080;font-style:italic;">-- empty string</span>
<!--</langsyntaxhighlight>-->
 
Note that 'z' and "z" are quite different. In Phix there is a strong difference between a character and a string.
 
All strings are ansi or utf8, depending on the encoding of the source file, eg
<langsyntaxhighlight Phixlang="phix">s = "日本語"</langsyntaxhighlight>
Utf8 strings are byte-subscripted rather than character-subscripted, so s[3] is not necessarily the third character.<br>
Phix strings have a length field in the (internal) header, /and/ a terminating null, so they can be used directly when interfacing to C-style languages.<br>
Line 1,945 ⟶ 2,007:
Strings are fully mutable: you can append, prepend, replace, substitute, and crop characters and slices (/substrings) any way you like, eg
 
<!--<langsyntaxhighlight Phixlang="phix">-->
<span style="color: #004080;">string</span> <span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"food"</span>
<span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">..</span><span style="color: #000000;">3</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'e'</span> <span style="color: #000080;font-style:italic;">-- s is now "feed" (replace all)</span>
<span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">..</span><span style="color: #000000;">2</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"east"</span> <span style="color: #000080;font-style:italic;">-- s is now "feasted" (replace substring)</span>
<span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">..</span><span style="color: #000000;">5</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">""</span> <span style="color: #000080;font-style:italic;">-- s is now "fed"</span>
<!--</langsyntaxhighlight>-->
 
Special characters may be entered (between quotes) using a back-slash:
Line 1,973 ⟶ 2,035:
If the literal begins with a newline, it is discarded and any immediately following leading underscores specify a (maximum) trimming that should be applied to all subsequent lines. Examples:
 
<!--<langsyntaxhighlight Phixlang="phix">-->
<span style="color: #000000;">ts</span> <span style="color: #0000FF;">=</span> ""<span style="color: #008000;">`
this
Line 1,986 ⟶ 2,048:
<span style="color: #000000;">ts</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"this\nstring\\thing"</span>
<!--</langsyntaxhighlight>-->
 
which are all equivalent.
Line 1,996 ⟶ 2,058:
Hex string literals are also supported (mainly for compatibility with OpenEuphoria, x/u/U for 1/2/4 byte codes), eg:
 
<!--<langsyntaxhighlight Phixlang="phix">-->
<span style="color: #0000FF;">?</span><span style="color: #000000;">x</span><span style="color: #008000;">"68 65 6c 6c 6f"</span><span style="color: #0000FF;">;</span> <span style="color: #000080;font-style:italic;">-- displays "hello"</span>
<!--</langsyntaxhighlight>-->
 
=={{header|PHP}}==
Line 2,007 ⟶ 2,069:
while single-quotes do not.
 
<langsyntaxhighlight lang="php">'c'; # character
'hello'; # these two strings are the same
"hello";
Line 2,022 ⟶ 2,084:
<<'END' # Here-Document like single-quoted
Same as above, but no interpolation of $variables.
END;</langsyntaxhighlight>
 
=={{header|Picat}}==
A string is a list of characters. The string literal is in double quotes (a character is in single quote, e.g 's'):
<pre>"string"</pre>
 
It can also be constructed as a list of characters:
<pre>['s','t','r','i','n','g']</pre>
 
or as a list of (character) atoms (without single quotes):
<pre>[s,t,r,i,n,g]</pre>
 
However, upper case characters must be quoted (otherwise they are considered variables):
<pre>['S',t,r,i,n,g]</pre>
 
 
Quoting of certain characters are with an escape character (<code>\c</code>):
 
<pre>"a string\'s quotes: \"a string\'s quotes\". Spaces: \t\n\l\r"</pre>
 
A string can be written on several lines where the newlines are kept:
<syntaxhighlight lang="picat"> X = "string with
newlines and
spaces",
% ...
</syntaxhighlight>
 
Using a single <code>\</code> as the last character on a line makes the line continue without newline.
<syntaxhighlight lang="picat"> X = "string with \
newlines \
and \
spaces",
% ...
</syntaxhighlight>
 
is the same as
<pre>string with newlines and spaces</pre>
 
 
=={{header|PicoLisp}}==
Line 2,029 ⟶ 2,128:
 
Syntactically, transient symbols (called "strings" in the following) are surrounded by double quotes.
<langsyntaxhighlight PicoLisplang="picolisp">: "ab\"cd"
-> "ab\"cd"</langsyntaxhighlight>
Double quotes in strings are escaped with a backslash.
 
ASCII control characters can be written using the hat ('^') character:
<langsyntaxhighlight PicoLisplang="picolisp">: "ab^Icd^Jef" # Tab, linefeed</langsyntaxhighlight>
There is no special character type or representation. Individual characters are handled as single-character strings:
<langsyntaxhighlight PicoLisplang="picolisp">: (chop "abc")
-> ("a" "b" "c")
 
: (pack (reverse @))
-> "cba"</langsyntaxhighlight>
A limited handling of here-strings is available with the '[http://software-lab.de/doc/refH.html#here here]' function.
 
=={{header|Pike}}==
<langsyntaxhighlight lang="pike">
'c'; // Character code (ASCII) (result: 99)
"c"; // String (result: "c")
Line 2,052 ⟶ 2,151:
string using the
preprocessor" // single literal string with newlines in it
</syntaxhighlight>
</lang>
 
=={{header|PL/I}}==
<syntaxhighlight lang="pl/i">
<lang PL/I>
'H' /* a single character as a literal. */
'this is a string'
Line 2,062 ⟶ 2,161:
/* stored are <<John's cat>> */
'101100'b /* a bit string, stored as one bit per digit. */
</syntaxhighlight>
</lang>
 
=={{header|Plain English}}==
A string literal is surrounded by double quotes. Plain English does not make a distinction between string and character literals.
 
To escape a double quote inside a string literal, use two double quotes.
<syntaxhighlight lang="text">"a ""string"" literal"</syntaxhighlight>
 
=={{header|plainTeX}}==
 
<langsyntaxhighlight lang="tex">`a' is for ``apple"
\end</langsyntaxhighlight>
 
The same as [[Quotes#LaTeX|LaTeX case]], even though one should say the opposite.
Line 2,081 ⟶ 2,186:
String are written in quotes
 
<langsyntaxhighlight lang="pop11">'a' ;;; string consisting of single character</langsyntaxhighlight>
 
Backslash is used to insert special charaters into strings:
 
<langsyntaxhighlight lang="pop11">'\'\n' ;;; string consisting of quote and newline</langsyntaxhighlight>
 
=={{header|PowerShell}}==
Line 2,100 ⟶ 2,205:
Standard Prolog has no string types. It has atoms which can be formed in two ways, one of which is wrapping arbitrary text in single quotation marks:
 
<langsyntaxhighlight lang="prolog">'This is an "atom" and not a string.'</langsyntaxhighlight>
 
Such atoms can be (and are) treated as immutable strings in Prolog in many cases. Another string-like form wraps text in double quotation marks:
 
<langsyntaxhighlight lang="prolog">"This 'string' will fool you if you're in a standard Prolog environment."</langsyntaxhighlight>
 
While this appears as a string to non-Prolog users, it is in reality a linked list of integers with each node containing the integer value of the character (or for Unicode-capable systems, code point) at that location. For example:
 
<langsyntaxhighlight lang="prolog">?- [97, 98, 99] = "abc".
true.</langsyntaxhighlight>
 
Individual character constants are special forms of integer (syntax sugar) using a 0' prefix:
 
<langsyntaxhighlight lang="prolog">?- 97 = 0'a.
true.</langsyntaxhighlight>
 
{{works with|SWI Prolog|7.0}}
Line 2,120 ⟶ 2,225:
SWI-Prolog, beginning with version 7, introduced a new native string type. Unless options are specifically set by the user, character sequences wrapped in double quotes are now a string data type. The older list-based version uses back quotes instead:
 
<langsyntaxhighlight lang="prolog">?- [97, 98, 99] = "abc".
false.
?- [97, 98, 99] = `abc`.
true.</langsyntaxhighlight>
 
Also starting with SWI-Prolog version 7, quasiquotation became possible. While not exactly a string type directly, they can be (ab)used to give multi-line strings. More importantly, however, they permit special string handling to be embedded into Prolog code, in effect permitting entire other languages inside of Prolog to be used natively as per this example:
 
<langsyntaxhighlight lang="prolog">test_qq_odbc :-
myodbc_connect_db(Conn),
odbc_query(Conn, {|odbc||
Line 2,139 ⟶ 2,244:
C.category_id=G.category_id
|}, Row),
writeln(Row).</langsyntaxhighlight>
 
In this example, the test_qq_odbc/0 predicate connects to an ODBC database and performs a query. The query is wrapped into a multi-line quasiquotation (beginning with {| and ending with |}) that checks the syntax and security of the query, so not only is the query a multi-line string, it is a **checked** multiline string in this case.
Line 2,145 ⟶ 2,250:
=={{header|PureBasic}}==
PureBasic supports char in ASCII and UNICODE as well as both dynamic and fixed length strings.
<langsyntaxhighlight PureBasiclang="purebasic">; Characters (*.c), can be ASCII or UNICODE depending on compiler setting
Define.c AChar='A'
; defines as *.a it will be ASCII and *.u is always UNICODE
Line 2,160 ⟶ 2,265:
; '"' can be included via CHR() or its predefined constant
Define AStringQuotes$=Chr(34)+"Buu"+Chr(34)+" said the ghost!"
Define BStringQuotes$=#DOUBLEQUOTE$+"Buu"+#DOUBLEQUOTE$+" said yet a ghost!"</langsyntaxhighlight>
To dynamically detect the current sizes of a character, e.g. ASCI or UNICODE mode, StringByteLength() can be used.
<langsyntaxhighlight PureBasiclang="purebasic">Select StringByteLength("X")
Case 1
Print("ASCII-mode; Soo, Hello world!")
Case 2
Print("UNICODE-mode; Soo, 您好世界!")
EndSelect</langsyntaxhighlight>
 
=={{header|Python}}==
Line 2,174 ⟶ 2,279:
One can use single or double quotes.
 
<langsyntaxhighlight lang="python">'c' == "c" # character
'text' == "text"
' " '
Line 2,180 ⟶ 2,285:
'\x20' == ' '
u'unicode string'
u'\u05d0' # unicode literal</langsyntaxhighlight>
 
As shown in the last examples, Unicode strings
Line 2,188 ⟶ 2,293:
This is useful when defining regular expressions as it avoids the need to use sequences like \\\\ (a sequence of four backslashes) in order to get one literal backslash into a regular expression string.
 
<langsyntaxhighlight lang="python">r'\x20' == '\\x20'</langsyntaxhighlight>
 
The Unicode and raw string modifiers can be combined to prefix a raw Unicode string. This '''must''' be done as "ur" or "UR" (not with the letters reversed as it: "ru").
Line 2,194 ⟶ 2,299:
Here-strings are denoted with triple quotes.
 
<langsyntaxhighlight lang="python">''' single triple quote '''
""" double triple quote """</langsyntaxhighlight>
 
The "u" and "r" prefixes can also be used with triple quoted strings.
Line 2,230 ⟶ 2,335:
See [http://stat.ethz.ch/R-manual/R-patched/library/base/html/Quotes.html ?Quotes] for more information.
 
<langsyntaxhighlight Rlang="r">str1 <- "the quick brown fox, etc."
str2 <- 'the quick brown fox, etc.'
identical(str1, str2) #returns TRUE</langsyntaxhighlight>
 
R also supports testing string literals with '''==''', e.g.,
 
<langsyntaxhighlight Rlang="r">modestring <- 'row,col'
mode.vec <- unlist(strsplit(modestring, ','))
mode.vec[1] # "row"
mode.vec[2] # "col"
if (mode.vec[2] == 'col') { cat('Col!\n') } # Col! (with no quotes)
if (mode.vec[1] == "row") { cat('Row!\n') } # Row!</langsyntaxhighlight>
 
R also uses backticks, for creating non-standard variable names (amongst other things).
 
<langsyntaxhighlight Rlang="r">`a b` <- 4
`a b` # 4
a b # Error: unexpected symbol in "a b"</langsyntaxhighlight>
 
R will print different styles of single and double quote using sQuote and dQuote
 
<langsyntaxhighlight Rlang="r">options(useFancyQuotes=FALSE)
cat("plain quotes: ", dQuote("double"), "and", sQuote("single"), "\n")</langsyntaxhighlight>
 
returns
Line 2,258 ⟶ 2,363:
plain quotes: "double" and 'single'
 
<langsyntaxhighlight Rlang="r">options(useFancyQuotes=TRUE)
cat("fancy quotes: ", dQuote("double"), "and", sQuote("single"), "\n")</langsyntaxhighlight>
 
returns
Line 2,265 ⟶ 2,370:
fancy quotes: “double” and ‘single’
 
<langsyntaxhighlight Rlang="r">options(useFancyQuotes="TeX")
cat("fancy quotes: ", dQuote("double"), "and", sQuote("single"), "\n")</langsyntaxhighlight>
 
returns
Line 2,277 ⟶ 2,382:
sometime using a name for the character.
 
<syntaxhighlight lang="racket">
<lang Racket>
#\a
#\space
#\return
</syntaxhighlight>
</lang>
 
Strings are double-quoted, and have most of the usual C-style escapes.
Line 2,322 ⟶ 2,427:
In any case, an initial <tt>Q</tt>, <tt>q</tt>, or <tt>qq</tt> may omit the initial colon to form traditional Perl quotes such as <tt>qw//</tt>.
And Q can be used by itself to introduce a quote that has no escapes at all except for the closing delimiter:
<syntaxhighlight lang="raku" perl6line>my $raw = Q'$@\@#)&!#';</langsyntaxhighlight>
Note that the single quotes there imply no single quoting semantics as they would in Perl 5. They're just the quotes the programmer happened to choose, since they were most like the raw quoting. Single quotes imply <tt>:q</tt> only when used as normal single quotes are, as discussed below.
As in Perl 5, you can use any non-alphanumeric, non-whitespace characters for delimiters with the general forms of quoting, including matching bracket characters, including any Unicode brackets.
Line 2,343 ⟶ 2,448:
Heredocs now have no special <tt><<</tt> syntax,
but fall out of the <tt>:to</tt> adverb:
<syntaxhighlight lang="raku" perl6line>say qq:to/END/;
Your ad here.
END</langsyntaxhighlight>
Indentation equivalent to the ending tag is automatically removed.
 
Backslash sequences recognized by <tt>:b</tt> (and hence <tt>:qq</tt>) include:
<syntaxhighlight lang="raku" perl6line>"\a" # BELL
"\b" # BACKSPACE
"\t" # TAB
Line 2,363 ⟶ 2,468:
"\c8" # BACKSPACE
"\c[13,10]" # CRLF
"\c[LATIN CAPITAL LETTER A, COMBINING RING ABOVE]"</langsyntaxhighlight>
Leading <tt>0</tt> specifically does not mean octal in Perl 6;
you must use <tt>\o</tt> instead.
Line 2,372 ⟶ 2,477:
ASCII characters are prefixed by a single dollar sign.
 
<syntaxhighlight lang="retro">$c
<lang Retro>$c
'hello,_world!
'This_is_'a_string'
</syntaxhighlight>
</lang>
 
=={{header|REXX}}==
Line 2,383 ⟶ 2,488:
There is no difference between them as far as specifying a REXX literal.
<br>You can double them (code two of them adjacent) to specify a quote within the string.
<langsyntaxhighlight lang="rexx">char1 = "A"
char2 = 'A'
str = "this is a string"
another = 'this is also a string'
escape1 = "that's it!"
escape2 = 'that''s it!'</langsyntaxhighlight>
Variable expansion is not possible within REXX literals.
<br>Simply concatenate the string with the variable:
<langsyntaxhighlight lang="rexx">amount = 100
result = "You got" amount "points."
say result</langsyntaxhighlight>
{{out}}
<pre>
Line 2,399 ⟶ 2,504:
</pre>
It's also possible to express characters in hexadecimal notation in a string:
<langsyntaxhighlight lang="rexx">lf = '0A'x
cr = '0D'x
 
Line 2,405 ⟶ 2,510:
ppp = 'dead beaf 11112222 33334444 55556666 77778888 00009999 c0ffee'X
 
lang = '52455858'x /*which is "REXX" on ASCII-computers.*/</langsyntaxhighlight>
Binary strings are also possible:
<langsyntaxhighlight lang="rexx">jjj = '01011011'B
jjj = '01011011'b
jjj = "0101 1011"b
jjj = '0101 1011 1111'b
longjjj = '11110000 10100001 10110010 11100011 11100100'B</langsyntaxhighlight>
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
see 'This is a "quoted string"'
</syntaxhighlight>
</lang>
 
=={{header|Ruby}}==
Quotes that do not interpolate:
<langsyntaxhighlight lang="ruby">'single quotes with \'embedded quote\' and \\backslash'
%q(not interpolating with (nested) parentheses
and newline)</langsyntaxhighlight>
 
Quotes that interpolate:
<langsyntaxhighlight lang="ruby">a = 42
"double quotes with \"embedded quote\"\nnewline and variable interpolation: #{a} % 10 = #{a % 10}"
%Q(same as above)
%|same as above|</langsyntaxhighlight>
 
Heredocs
<langsyntaxhighlight lang="ruby">print <<HERE
With an unquoted delimiter, this interpolates:
a = #{a}
Line 2,440 ⟶ 2,545:
print <<'NON_INTERPOLATING'
This will not interpolate: #{a}
NON_INTERPOLATING</langsyntaxhighlight>
 
=={{header|Rust}}==
 
A <code>char</code> in Rust is a Unicode scalar value. A char type in Rust is always four bytes in size and can be denoted by single quotes:
 
<syntaxhighlight lang="rust">
let char01: char = 'a';
let char02: char = '\u{25A0}'; // Black square
let char03: char = '❤'; // Heart
</syntaxhighlight>
 
Rust has two common string types: <code>&str</code> and <code>String</code>. These different string types are used depending if it's a fixed string literal that is saved into the executable and lives throughout the program execution (usually borrowed as a <code>&str</code>), a string slice that references a contiguous sequence of elements (borrowed as a <code>&str</code>), or a <code>String</code> which allows for a growable heap allocated valid UTF-8 string. Only the <code>String</code> type is fully owned by its variable, and the other two are only interacted through the reference <code>&str</code>. The <code>&str</code> string slice type may point to a string literal or a heap-allocated string.
 
The String type in Rust is intended to always contain a valid UTF-8 string. UTF-8 is a "variable width" encoding, and therefore Strings are going to be typically smaller than an array of the same Rust <code>char</code>'s. For example, the String "hi" is all within ASCII, and therefore a UTF-8 String of "hi" represents each character as one byte each. On the other hand, a char array ['h', 'i'] would take up 8 bytes in total. A string is denoted by double quotes:
 
<syntaxhighlight lang="rust">
const string_literal_str1: &str = "Hi Rust!";
 
let string_slice_str1: &str = string_literal_str1; // Creating a string slice from a string literal
let string_slice_str2: &str = "hello str"; // String slice pointing to string literal "hello str"
 
let string1: String = String::new(); // Empty String
let string2: String = String::from("hello"); // Creating String from string literal "hello"
let string3: String = "hi".to_string();
let string4: String = "bye".to_owned();
let string5: String = "see you soon".into();
// The "to_string()", "to_owned" or "into" are all equivalent in the code above.
// The "to_string()", "to_owned" or "into" methods are needed so that a string slice (&str) or a string literal (&str) is explicitly converted into a heap-allocated fully-owned String type. Otherwise the compiler's type checker will complain "expected struct `String`, found `&str` (string slice)"
 
let string6: String = string_slice_str2.to_owned(); // Explictly converting the string_slice_str2 into a heap-allocated fully-owned String. This can be done with "to_string()", "to_owned" or "into".
 
// String slices can also point to heap allocated strings:
let string_slice_str3: &str = &string2; // Creating a string slice to a heap-allocated String.
let string7: String = string_slice_str3.to_string(); // Converting string_slice_str3 into a heap-allocated fully-owned String copy, resulting in a new independent owned string copy of the original String. This can be done with "to_string()", "to_owned" or "into".
</syntaxhighlight>
 
Rust supports verbatim strings and here-strings by putting <code>r#</code> before the first double quotes, and the end is marked by adding a <code>#</code> after the final double quotes. If there is a <code>"#</code> inside the contents of your here-string or your verbatim string then you can just add more <code>#</code>'s as required in both the beggining and the end:
<syntaxhighlight lang="rust">
let verbatim_here_string01: &str = r#"A \verbatim string\, line breaks in programming use \n and tabs \t"#;
let verbatim_here_string02: &str = r#"
A \multi-line\ string, in programming
line breaks use the characters \n
and for tabs we use the characters \t
"#;
let verbatim_here_string03: &str = r##"
Part number "#001": 1
Part number "#002": 2
Part number "#003": 3
"##;
</syntaxhighlight>
 
To expand variables in Rust we have 3 options: we can use the "format!" macro, the "print!" macro or the "println!" macro.
<syntaxhighlight lang="rust">
let number: i32 = 42;
let number_string: String = format!("Number: {}", number);
println!("The result in string form is '{}'.", number_string);
print!("The number is {}. ", number); // Print without line break
println!("Again, it's {}", number); // Print with line break
// The above prints:
// The result in string form is 'Number: 42'.
// The number is 42. Again, it's 42
</syntaxhighlight>
 
In Rust, there are other string types that are specialized to specific string requirements, such as working with system strings (OsString and OsStr), working with C strings (CString and CStr), and working with system paths (Path and PathBuf).
 
=={{header|S-lang}}==
Line 2,455 ⟶ 2,624:
* $ to request dollar prefix variable substitutions within the given string.
 
<langsyntaxhighlight Clang="c">% String literals
variable c, ch, s, b, r, v;
 
Line 2,501 ⟶ 2,670:
() = fputs(b, stdout);
() = fputs("\n", stdout);
printf("strlen(b) is %d, bstrlen(b) is %d\n", strlen(b), bstrlen(b));</langsyntaxhighlight>
 
{{out}}
Line 2,547 ⟶ 2,716:
Character literals use single quotes marks:
 
<langsyntaxhighlight lang="scala">val c = 'c'</langsyntaxhighlight>
 
However, symbols are denoted with a single quote,
so care must be taken not to confuse the two:
 
<langsyntaxhighlight lang="scala">val sym = 'symbol</langsyntaxhighlight>
 
Strings can use either double quotes, or three successive double quotes.
The first allows special characters, the second doesn't:
 
<langsyntaxhighlight lang="scala">scala> "newline and slash: \n and \\"
res5: java.lang.String =
newline and slash:
Line 2,563 ⟶ 2,732:
 
scala> """newline and slash: \n and \\"""
res6: java.lang.String = newline and slash: \n and \\</langsyntaxhighlight>
 
However, Unicode characters are expanded wherever they happen, even inside comments.
So, for instance:
 
<langsyntaxhighlight lang="scala">scala> val uniquote = \u0022normal string"
uniquote: java.lang.String = normal string
 
scala> val insidequote = """an inside \u0022 quote"""
insidequote: java.lang.String = an inside " quote</langsyntaxhighlight>
 
Finally, on version 2.7, the triple-double-quoted string ends at the third consecutive quote, on version 2.8 it ends on the last quote of a series of at least three double-quotes.
 
'''Scala 2.7'''
<langsyntaxhighlight lang="scala">scala> val error = """can't finish with a quote: """"
<console>:1: error: unterminated string
val error = """can't finish with a quote: """"
^</langsyntaxhighlight>
 
'''Scala 2.8'''
<langsyntaxhighlight lang="scala">scala> val success = """but it can on 2.8: """"
success: java.lang.String = but it can on 2.8: "</langsyntaxhighlight>
 
=={{header|Scheme}}==
 
Characters are specified using the "#\" syntax:
<langsyntaxhighlight lang="scheme">#\a
#\A
#\?
#\space
#\newline</langsyntaxhighlight>
 
Strings are contained in double quotes:
<langsyntaxhighlight lang="scheme">"Hello world"</langsyntaxhighlight>
 
Literal symbols, lists, pairs, etc. can be quoted using the quote syntax:
<langsyntaxhighlight lang="scheme">'apple
'(1 2 3) ; same as (list 1 2 3)
'() ; empty list
'(a . b) ; same as (cons 'a 'b)</langsyntaxhighlight>
 
=={{header|Seed7}}==
Line 2,609 ⟶ 2,778:
A [http://seed7.sourceforge.net/manual/tokens.htm#Character_literals character literal] is written as UTF-8 encoded Unicode character enclosed in single quotes.
 
<langsyntaxhighlight lang="seed7">var char: ch is 'z';</langsyntaxhighlight>
 
The type [http://seed7.sourceforge.net/manual/types.htm#string string] describes sequences of Unicode characters.
Line 2,615 ⟶ 2,784:
A [http://seed7.sourceforge.net/manual/tokens.htm#String_literals string literal] is a sequence of UTF-8 encoded Unicode characters surrounded by double quotes.
 
<langsyntaxhighlight lang="seed7">var string: stri is "hello";</langsyntaxhighlight>
 
This means that 'z' and "z" are different.
Line 2,656 ⟶ 2,825:
Note that the integer literal is interpreted decimal unless it is written as [http://seed7.sourceforge.net/manual/types.htm#based_integer based integer].
 
<langsyntaxhighlight lang="seed7">"Euro sign: \8364;"</langsyntaxhighlight>
 
There is also a possibility to break a string into several lines.
 
<langsyntaxhighlight lang="seed7">var string: example is "this is a string\
\ which continues in the next line\n\
\and contains a line break";</langsyntaxhighlight>
 
There is no built-in mechanism for expanding variables within strings.
Line 2,668 ⟶ 2,837:
=={{header|Sidef}}==
Quotes that do not interpolate:
<langsyntaxhighlight lang="ruby">'single quotes with \'embedded quote\' and \\backslash';
‚unicode single quoted’;
%q(not interpolating with (nested) parentheses
and newline);</langsyntaxhighlight>
 
Quotes that interpolate:
<langsyntaxhighlight lang="ruby">var a = 42;
"double \Uquotes\E with \"embedded quote\"\nnewline and variable interpolation: #{a} % 10 = #{a % 10}";
„same as above”;
%Q(same as above);</langsyntaxhighlight>
 
Heredocs:
<langsyntaxhighlight lang="ruby">print <<EOT
Implicit double-quoted (interpolates):
a = #{a}
Line 2,692 ⟶ 2,861:
print <<'NON_INTERPOLATING'
This will not interpolate: #{a}
NON_INTERPOLATING</langsyntaxhighlight>
 
=={{header|Slate}}==
Line 2,698 ⟶ 2,867:
Characters are specified using the <tt>$</tt> syntax:
 
<langsyntaxhighlight lang="slate">$a
$D
$8
$,
$\s
$\n</langsyntaxhighlight>
 
Strings are contained in single quotes, with backslash for escaping:
<langsyntaxhighlight lang="slate">'Hello\'s the word.'</langsyntaxhighlight>
 
=={{header|SQL}}==
String literals in SQL use single-quotation. There are no escapes, but you can double a <tt>'</tt> mark to make a single <tt>'</tt> in the text.
<langsyntaxhighlight lang="sql">SELECT 'The boy said ''hello''.';</langsyntaxhighlight>
 
=={{header|Standard ML}}==
 
Characters are contained in the <code>#""</code> syntax:
<langsyntaxhighlight lang="sml">- #"a";
val it = #"a" : char</langsyntaxhighlight>
 
Strings are contained in double quotes:
<langsyntaxhighlight lang="sml">- "Hello world";
val it = "Hello world" : string</langsyntaxhighlight>
 
Strings may be split across lines and concatenated
by having two backslashes around the newline and whitespace:
<langsyntaxhighlight lang="sml">- "abc\
\def";
val it = "abcdef" : string</langsyntaxhighlight>
 
=={{header|Swift}}==
<langsyntaxhighlight Swiftlang="swift">let you = "You"
let str1 = "\(you) can insert variables into strings."
let str2 = "Swift also supports unicode in strings ı∫ƒ∂ß´™¡à"
Line 2,735 ⟶ 2,904:
let str4 = "'" // '
let str5 = "\"" // "
println(str3)</langsyntaxhighlight>
{{out}}
<pre>
Line 2,745 ⟶ 2,914:
Swift 4 introduced multi-line string literals called long strings. Long strings are strings delimited by <code>"""triple quotes"""</code> that can contain newlines and individual <code>"</code> characters without the need to escape them.
 
<langsyntaxhighlight Swiftlang="swift">let author = "Author"
let xml == """
<?xml version="1.0"?>
Line 2,760 ⟶ 2,929:
"""
 
println(xml)</langsyntaxhighlight>
{{out}}
<pre>
Line 2,783 ⟶ 2,952:
 
Double quotes allow command and variable interpolation:
<langsyntaxhighlight lang="tcl">set str "This is Tcl $::tcl_version\tIt is [clock format [clock seconds]]"
puts $str ;# ==> This is Tcl 8.5 It is Mon Apr 06 16:49:46 EDT 2009</langsyntaxhighlight>
 
Braces prevent interpolation
<langsyntaxhighlight lang="tcl">set str {This is Tcl $::tcl_version\tIt is [clock format [clock seconds]]}
puts $str ;# ==> This is Tcl $::tcl_version\tIt is [clock format [clock seconds]]</langsyntaxhighlight>
 
=={{header|TI-89 BASIC}}==
Line 2,799 ⟶ 2,968:
 
'''Basic strings''' are surrounded by quotation marks. Any Unicode character may be used except those that must be escaped: quotation mark, backslash, and the control characters other than tab (U+0000 to U+0008, U+000A to U+001F, U+007F).
<langsyntaxhighlight TOMLlang="toml">str = "I'm a string. \"You can quote me\". Name\tJos\u00E9\nLocation\tSF."</langsyntaxhighlight>
 
'''Multi-line basic strings''' are surrounded by three quotation marks on each side and allow newlines. A newline immediately following the opening delimiter will be trimmed. All other whitespace and newline characters remain intact.
<langsyntaxhighlight TOMLlang="toml">str1 = """
Roses are red
Violets are blue"""</langsyntaxhighlight>
 
When the last non-whitespace character on a line is a <code>\</code> ("line ending backslash"), it will be trimmed along with all whitespace (including newlines) up to the next non-whitespace character or closing delimiter. All of the escape sequences that are valid for basic strings are also valid for multi-line basic strings.
<langsyntaxhighlight TOMLlang="toml"># The following strings are byte-for-byte equivalent:
str1 = "The quick brown fox jumps over the lazy dog."
 
Line 2,821 ⟶ 2,990:
fox jumps over \
the lazy dog.\
"""</langsyntaxhighlight>
 
'''Literal strings''' are surrounded by single quotes and do not support escaping. This means that there is no way to write a single quote in a literal string. Like basic strings, they must appear on a single line.
<langsyntaxhighlight TOMLlang="toml"># What you see is what you get.
winpath = 'C:\Users\nodejs\templates'
winpath2 = '\\ServerX\admin$\system32\'
quoted = 'Tom "Dubs" Preston-Werner'
regex = '<\i\c*\s*>'</langsyntaxhighlight>
 
'''Multi-line literal strings''' are surrounded by three single quotes on each side and allow newlines. Like literal strings, there is no escaping whatsoever. A newline immediately following the opening delimiter will be trimmed. All other content between the delimiters is interpreted as-is without modification. One or two single quotes are allowed anywhere within a multi-line literal string, but sequences of three or more single quotes are not permitted.
<langsyntaxhighlight TOMLlang="toml">regex2 = '''I [dw]on't need \d{2} apples'''
lines = '''
The first newline is
Line 2,837 ⟶ 3,006:
All other whitespace
is preserved.
'''</langsyntaxhighlight>
 
=={{header|TUSCRIPT}}==
<langsyntaxhighlight lang="tuscript">
$$ MODE TUSCRIPT,{}
s1=*
Line 2,853 ⟶ 3,022:
show=JOIN(show)
PRINT show
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 2,874 ⟶ 3,043:
enclosed with doublequotes and to put doublequote characters
in a string enclosed within singlequotes:
<langsyntaxhighlight lang="bash">echo "The boy said 'hello'."
echo 'The girl said "hello" too.'</langsyntaxhighlight>
 
We can also use an escapesequence to put doublequote characters in an interpolated string:
 
<langsyntaxhighlight lang="bash">print "The man said \"hello\".";</langsyntaxhighlight>
 
=== Here documents ===
Line 2,886 ⟶ 3,055:
Here documents cannot be used to represent literal strings as an expression for variable assignment.
 
<langsyntaxhighlight lang="bash">cat << END
1, High Street,
SMALLTOWN,
West Midlands.
WM4 5HD.
END</langsyntaxhighlight>
 
=={{header|Ursala}}==
 
Single characters are denoted with a back quote.
<langsyntaxhighlight Ursalalang="ursala">a = `x</langsyntaxhighlight>
Unprintable character constants can be expressed like this.
<langsyntaxhighlight Ursalalang="ursala">cr = 13%cOi&</langsyntaxhighlight>
Strings are enclosed in single forward quotes.
<langsyntaxhighlight Ursalalang="ursala">b = 'a string'</langsyntaxhighlight>
A single quote in a string is escaped by another single quote.
<langsyntaxhighlight Ursalalang="ursala">c = 'Hobson''s choice'</langsyntaxhighlight>
Multi-line strings are enclosed in dash-brackets.
<syntaxhighlight lang="ursala">d =
<lang Ursala>d =
 
-[this is a list
of strings]-</langsyntaxhighlight>
Dash-bracket enclosed text can have arbitrary nested
unquoted expressions, provided they evaluate to lists
of character strings.
<langsyntaxhighlight Ursalalang="ursala">e = -[the front matter -[ d ]- the rest of it]-
 
f = -[text -[ d ]- more -[ e ]- text ]-</langsyntaxhighlight>
This notation can also be used for defining functions.
<langsyntaxhighlight Ursalalang="ursala">g "x" = -[ Dear -[ "x" ]- bla bla ]-</langsyntaxhighlight>
The double quotes aren't for character strings but
dummy variables.
Line 2,923 ⟶ 3,092:
A simple quoted string is of the form 'string'
e.g
<syntaxhighlight lang ="v">'hello world' puts</langsyntaxhighlight>
 
=={{header|Vim Script}}==
Line 2,938 ⟶ 3,107:
{{works with|VBA|6.5}}
{{works with|VBA|7.1}}
<langsyntaxhighlight lang="vb"> Debug.Print "Tom said, ""The fox ran away."""
Debug.Print "Tom said, 'The fox ran away.'"</langsyntaxhighlight>
{{out}}
<pre>Tom said, "The fox ran away."
Line 2,948 ⟶ 3,117:
Visual Basic only supports single-line strings. The only escape sequence supported is the double double-quote (""), which is translated into a single double-quote.
 
<langsyntaxhighlight lang="vbnet">Dim s = "Tom said, ""The fox ran away."""
Result: Tom said, "The fox ran away."</langsyntaxhighlight>
 
=={{header|V (Vlang)}}==
 
Character literals for Unicode characters, "rune literals", are an alias for u32.
 
Character literals for UTF-8 characters, "string literals", are an alias for u8.
 
To denote rune, Unicode characters, ` (backticks) are used :
 
A rune can be converted to a UTF-8 string by using the .str() method.
 
rocket := `🚀`
 
rocket.str() == '🚀' // uses single quotes, not the backtick, after conversion
 
A string can be converted back to runes by the .runes() method.
 
hello := 'Hello World'
 
hello_runes := hello.runes() // [`H`, `e`, `l`, `l`, `o`, ` `, `W`, `o`, `r`, `l`, `d`]
 
In V, a string is an immutable array of read-only bytes. All Unicode characters are encoded using UTF-8:
 
mut s := 'hello 🌎'
 
s[0] = `H` // not allowed as immutable
 
// convert `string` to `[]u8`
 
s := 'hello 🌎'
 
arr := s.bytes()
 
assert arr.len == 10
 
// convert `[]u8` to `string`
 
s2 := arr.bytestr()
 
assert s2 == s
 
// indexing gives a byte, u8(66) == `B`
 
name := 'Bob'
 
println(name.len == 3) // will print 3
 
if name[0] == u8(66) {println(name[0].ascii_str())} // will print`B`
 
String literals are contained in quotes:
 
str:= "Hello, world!"
 
=={{header|WEB}}==
Line 3,002 ⟶ 3,223:
 
From v0.4.0 Wren also supports ''raw'' string literals. These are any text surrounded by triple double quotes, """, and are interpreted verbatim i.e. any control codes and/or interpolations are not processed as such. They can include single or double double quotes without problem.
<langsyntaxhighlight ecmascriptlang="wren">var s = "abc123"
var t = "abc\t123\%"
var u = "\U0001F64A\U0001F680"
Line 3,008 ⟶ 3,229:
var w = """a"bc""def\n%(v)"""
 
System.print([s, t, u, v, w])</langsyntaxhighlight>
 
{{out}}
Line 3,019 ⟶ 3,240:
Xojo only supports single-line strings. The only escape sequence supported is the double double-quote (""), which is translated into a single double-quote.
 
<langsyntaxhighlight lang="vbnet">Dim s As String = "Tom said, ""The fox ran away."""
Result: Tom said, "The fox ran away."</langsyntaxhighlight>
 
=={{header|XPL0}}==
Line 3,074 ⟶ 3,295:
=={{header|XSLT}}==
XSLT is based on XML, and so can use either " or ' to delimit strings. Since XML attribute values are defined using double-quotes, one must use single-quotes for string literals within attributes.
<langsyntaxhighlight lang="xml"><xsl:if test="starts-with(@name, 'Mr.')">Mister</xsl:if></langsyntaxhighlight>
 
Double and single quote characters may also be escaped with XML entities: &amp;quot; and &amp;apos; respectively.
Line 3,081 ⟶ 3,302:
{{trans|6502 Assembly}}
Strings are enclosed in double quotes.
<langsyntaxhighlight lang="z80">db "Hello World"</langsyntaxhighlight>
Any typed character in double quotes is assembled as the ASCII equivalent of that character. Therefore the following two data blocks are equivalent:
<langsyntaxhighlight lang="z80">db "Hello World"
db $48,$65,$6c,$6c,$6f,$20,$57,$6f,$72,$6c,$64</langsyntaxhighlight>
 
The assembler typically assumes nothing with regard to special characters. A <code>\n</code> will be interpreted literally, for example. How special characters are handled depends on the printing routine of the hardware's BIOS, or one created by the programmer. If your printing routine is able to support a null terminator and ASCII control codes, the following represents "Hello World" with the new line command and null terminator:
<langsyntaxhighlight lang="z80">db "Hello World",13,10,0</langsyntaxhighlight>
 
Creating your own printing routine is a bit out of the scope of this task but here's a simple demonstration that supports the \n and null termination:
<langsyntaxhighlight lang="z80">PrintString:
; HL contains the pointer to the string literal.
ld a,(hl)
Line 3,110 ⟶ 3,331:
call z,NewLine ;unimplemented routine, advances text cursor to next line. Only called if accumulator = 'n'.
inc hl ;advance past the 'n' to the next char.
jr PrintString ;jump back to top. Notice that neither the backslash nor the character after it were actually printed.</langsyntaxhighlight>
 
=={{header|zkl}}==
Line 3,118 ⟶ 3,339:
 
here-strings:
<langsyntaxhighlight lang="zkl">text:=
0'|foo|
"bar\n";</langsyntaxhighlight>
{{out}}
<pre>
"foobar\n"
</pre>
<langsyntaxhighlight lang="zkl">n:=7; text:=String(
"foo = ",3,"\n"
"bar=",n,"\n"
);</langsyntaxhighlight>
{{out}}
<pre>
9,476

edits