确定字符串中是否存在转义字符

时间:2014-02-28 05:44:44

标签: java string escaping

我说我有

String str="hello\" world\\";

打印str时,输出为

hello" world\

即使打印str.length(),输出也是

13

有没有办法证明str值有转义字符?

2 个答案:

答案 0 :(得分:3)

运行时没有转义字符这样的东西。

转义字符仅出现在字符串文字中。例如,

String literal = "Some\nEscape\rSequence\\\"";

在编译时,编译器会生成String值及其实际二进制表示形式(UTF-8 iirc)。 JVM直接使用String值。

你写了

  

我想每当我们打印一个字符串并且输出包含时   像“和\这样的人物,那么我们可以得出结论那些人物,   “和\已被转义?

事实并非如此,这些字符可能是从文件或其他InputStream中读取的。它们绝对不会在文本文件中转义。

答案 1 :(得分:0)

使用Apache Commons Library,特别是StringEscapeUtils#escapeJava

jshell> StringEscapeUtils.escapeJava("Newline \n here \u0344 and unicode \f\n\r\t\"\0\13 and more")
$136 ==> "Newline \\n here \\u0344 and unicode \\f\\n\\r\\t\\\"\\u0000\\u000B and more"

这会为每个转义序列添加一个反斜杠,并且还会为固定宽度的Unicode序列交换可变宽度的八进制序列。这意味着每个转义序列都包含" \\"两个反斜杠,后跟{n,b,r,t,f,",\}, a' u'字符,加上正好四个十六进制[0-F]数字。

如果您只想知道原始字符串是否包含转义序列,请搜索" \\"在Apache-fied字符串中。如果你想找到那些序列的位置,那就更多了。

请参阅this Gist