4

您好,智慧社区,

我已经围绕这个问题做了一些研究,但似乎无法找到我确切问题的答案

我面临一个奇怪的编译时问题,其中包含 unicode 转义码的 Java 字符串文字。

这是正在考虑的代码片段:

    String text = textArea.getText().trim();
    String unicodeReturn = "\u000A";
    text = 
            "\"" + 
            text
            .replace(" ", "%s")
            .replace("\\", "\\\\")
            .replace("\"", "\\\"")
            .replace("\n", "\u000A") 
            + 
            "\"";

我收到该行的编译时错误“字符串文字没有被双引号正确关闭”

    String unicodeReturn = "\u000A";

奇怪的是,线

    .replace("\n", "\u000A") 

如果存在相同的 unicode 文字,似乎不会引起任何问题。我已经使用 unicode 符号语法有一段时间了。如果我的记忆没有让我失望,则格式为\uXXXX,其中 X 是十六进制数字。

我的环境是

  • JDK 1.8.0_66
  • MACOSX El Capitan
  • 日食火星.1

我的问题是:

  1. 有没有人遇到过同样的问题?
  2. 这是一个已知的 JDK 1.8 编译器错误吗?
  3. 有解决方案或解决方法吗?
  4. 有谁知道我做错了什么?

(这非常令人沮丧,并阻止我编译我的代码)

4

1 回答 1

3

\u unicode在解析文本之前被转换,所以

String unicodeReturn = "\u000A";

是相同的

String unicodeReturn = "
";

这是一个完全由 \u 代码组成的 Hello World 程序示例https://stackoverflow.com/a/30727799/57695

\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020\u0020
\u0063\u006c\u0061\u0073\u0073\u0020\u0055\u0067\u006c\u0079
\u007b\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020
\u0020\u0020\u0020\u0020\u0073\u0074\u0061\u0074\u0069\u0063
\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028
\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020\u0020
\u0020\u0020\u0020\u0020\u0061\u0072\u0067\u0073\u0029\u007b
\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074
\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0020
\u0022\u0048\u0065\u006c\u006c\u006f\u0020\u0077\u0022\u002b
\u0022\u006f\u0072\u006c\u0064\u0022\u0029\u003b\u007d\u007d

相反,你可以做

.replace("\n", "\\u000A")

要不就

.replace("\n", "\\n")
于 2016-02-10T02:52:03.710 回答