我说我有
String str="hello\" world\\";
打印str
时,输出为
hello" world\
即使打印str.length()
,输出也是
13
有没有办法证明str
值有转义字符?
答案 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。