本问题已经有最佳答案,请猛点这里访问。

你好,智能社区,

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

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

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

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

我得到一个编译时错误"字符串文本没有用双引号正确地结束"

String unicodeReturn ="\u000A";

奇怪的是,这条线

.replace("

","\u000A")

如果存在相同的Unicode文本,似乎不会导致任何问题。我使用Unicode符号语法已经有一段时间了。如果内存没有出现故障,则格式为uxxxx,其中x是十六进制数字。

我的环境是

JDK 1.8 066

麦考斯El Capitan

月蚀火星1

我的问题是:

有人遇到过同样的问题吗?

这是一个已知的JDK 1.8编译器错误吗?

是否有解决方案或解决方法?

有人知道我是否做错了什么吗?

(这很令人沮丧,阻止我编译代码)

stackoverflow.com/questions/30727515/…

在分析文本之前,将转换u个单码,以便

String unicodeReturn ="\u000A";

是一样的

String unicodeReturn ="

";

下面是一个hello world程序的示例,该程序完全由u代码组成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("
","\\u000A")
或者只是
.replace("
","\
")

谢谢@peterlawrey,似乎u000a对源代码有一些奇怪的影响,这有效地阻止了程序员使用unicode新行。不幸的是,不能选择\u000a,因为它将转换为u000a"字符序列,而不是回车符。这个问题有趣的方面是,我的第二行代码没有导致编译器错误,只有第一行代码。你知道为什么吗?

@Nargar你已经有了回车符号,我解释了为什么你可以在字符串中使用\u000a,所以这一点都不奇怪。你的第二行对我来说也是一个错误,我建议你的编译器不会因为前一行而显示这个错误。

我的用例是不同的,我正在构造的字符串是一个adb shell的shell命令,在这里我不能有这个命令。虽然不太确定u000a是否是解决方案,但是我正在做一些尝试和错误。如果你知道在adb shell命令中使用回车表示的好方法,我很乐意学习这种方法。

@我不清楚你需要做什么。ADB句柄 afaik。

adb shell输入文本命令不为我处理。尝试过各种各样的事情。我使用的是Android SDK 23

@所以你需要知道怎样把翻译成\u000a是一样的。