不要在字符串中转义双引号
Don't escape double quotes in a string
我已经编写了一个命令行脚本,并且正在使用 java
对其进行测试。
在命令行中,我这样写:script -html="anchor bold"
所以在使用 java 代码测试相同内容时,我的字符串应该如何概述?
-html=anchor bold"
它不起作用,因为没有包含双引号,所以我的测试失败了
-html=\"anchor bold\"
这会转义双引号,但我想要它。
-html=\\"anchor bold\\"
这导致 -html=\"anchor bold\"
但我不想要任何斜杠。
我正在使用 String[]
数组来执行命令。
new String[] { "--path=" + p,
"--user=" + user,
"--html=\"anchor bold\"",
"--port=8081"
}
命令行参数是:
path/executeScript --path=path1 --user=testUser --html="anchor bold" --port=8081
在您想要用作文字字符的任何内容前面使用转义字符,然后像往常一样将双引号括起来。
script -html="\"anchor bold\""
如果你想用 Java 测试你的脚本,参数包含引号,你别无选择,你必须转义它。
String[] command = new String[] {
"path/executeScript",
"--path=" + p,
"--user=" + user,
"--html=\"anchor bold\"",
"--port=8081"
}
Runtime.getRuntime().exec(command);
技术说明:
要声明字符串文字,唯一的方法是在字符串中的字符周围加上双引号。像这样:
"String Characters"
... String Characters
来自Java Language Specifications §3.10.5
:
A string literal consists of zero or more characters enclosed in double quotes. Characters may be represented by escape sequences (§3.10.6) - one escape sequence for characters in the range U+0000 to U+FFFF, two escape sequences for the UTF-16 surrogate code units of characters in the range U+010000 to U+10FFFF.
StringLiteral:
" {
StringCharacter} "
StringCharacter:
<b><a href="http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-InputCharacter" rel="nofollow noreferrer">InputCharacter</a></b> but not " or \
<b><a href="http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-EscapeSequence" rel="nofollow noreferrer">EscapeSequence</a></b>
See §3.10.6 for the definition of EscapeSequence.[...]
The following are examples of string literals:
"" // the empty string
"\"" // a string containing " alone
"This is a string" // a string containing 16 characters
"This is a " + // actually a string-valued constant expression,
"two-line string" // formed from two string literals
因为转义双引号是编译时语法要求,所以您必须转义字符串文字中的双引号。
您可以尝试使用 Unicode 文字,但我非常怀疑(剧透:它不会)编译器会接受它:
"--html=\u0022anchor bold\u0022"
— Wrong
使用转义:
"--html=\"anchor bold\""
— Right
其中被编译器视为:
... --html="anchor bold"
另请参阅:
- In Java, is there a way to write a string literal without having to escape quotes?
我能想到的方法..使用字符。
"--html=" + '"' + "anchor bold" + '"'
我已经编写了一个命令行脚本,并且正在使用 java
对其进行测试。
在命令行中,我这样写:script -html="anchor bold"
所以在使用 java 代码测试相同内容时,我的字符串应该如何概述?
-html=anchor bold"
它不起作用,因为没有包含双引号,所以我的测试失败了
-html=\"anchor bold\"
这会转义双引号,但我想要它。
-html=\\"anchor bold\\"
这导致 -html=\"anchor bold\"
但我不想要任何斜杠。
我正在使用 String[]
数组来执行命令。
new String[] { "--path=" + p,
"--user=" + user,
"--html=\"anchor bold\"",
"--port=8081"
}
命令行参数是:
path/executeScript --path=path1 --user=testUser --html="anchor bold" --port=8081
在您想要用作文字字符的任何内容前面使用转义字符,然后像往常一样将双引号括起来。
script -html="\"anchor bold\""
如果你想用 Java 测试你的脚本,参数包含引号,你别无选择,你必须转义它。
String[] command = new String[] {
"path/executeScript",
"--path=" + p,
"--user=" + user,
"--html=\"anchor bold\"",
"--port=8081"
}
Runtime.getRuntime().exec(command);
技术说明:
要声明字符串文字,唯一的方法是在字符串中的字符周围加上双引号。像这样:
"String Characters"
... String Characters
来自Java Language Specifications §3.10.5
:
A string literal consists of zero or more characters enclosed in double quotes. Characters may be represented by escape sequences (§3.10.6) - one escape sequence for characters in the range U+0000 to U+FFFF, two escape sequences for the UTF-16 surrogate code units of characters in the range U+010000 to U+10FFFF.
See §3.10.6 for the definition of EscapeSequence.StringLiteral: " {
StringCharacter} " StringCharacter: <b><a href="http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-InputCharacter" rel="nofollow noreferrer">InputCharacter</a></b> but not " or \ <b><a href="http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-EscapeSequence" rel="nofollow noreferrer">EscapeSequence</a></b>
[...]
The following are examples of string literals:"" // the empty string "\"" // a string containing " alone "This is a string" // a string containing 16 characters "This is a " + // actually a string-valued constant expression, "two-line string" // formed from two string literals
因为转义双引号是编译时语法要求,所以您必须转义字符串文字中的双引号。
您可以尝试使用 Unicode 文字,但我非常怀疑(剧透:它不会)编译器会接受它:
"--html=\u0022anchor bold\u0022"
— Wrong
使用转义:
"--html=\"anchor bold\""
— Right
其中被编译器视为:
... --html="anchor bold"
另请参阅:
- In Java, is there a way to write a string literal without having to escape quotes?
我能想到的方法..使用字符。
"--html=" + '"' + "anchor bold" + '"'