关于unicode转义字符的JDK 1.8给出的字符串文字未被双引号错误正确关闭

时间:2016-02-10 02:48:55

标签: java unicode unicode-escapes

智能社区你好,

我围绕这个问题做了一些研究,似乎找不到我确切问题的答案

我正面临一个包含unicode转义码的Java String文字的奇怪的编译时问题。

以下是正在考虑的代码段:

    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
  • Eclipse Mars.1

我的问题是:

  1. 有没有人遇到同样的问题?
  2. 这是一个已知的JDK 1.8编译器错误吗?
  3. 是否有解决方案或解决方法?
  4. 有人知道我做错了什么吗?
  5. (这非常令人沮丧并阻止我编译我的代码)

1 个答案:

答案 0 :(得分:3)

在解析文本

之前,转换为

String unicodeReturn = "\u000A";

相同
String unicodeReturn = "
";

以下是完全由\ u codes https://stackoverflow.com/a/30727799/57695

组成的Hello World程序示例
\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")