不要在字符串中转义双引号

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" + '"'