如何在Java中转义字符串?
我正在阅读Java中的源文件,但是当我打印它(sysout)时,转义字符不再转义。如何在Java中转义字符串中的字符?\n
\t
我正在阅读Java中的源文件,但是当我打印它(sysout)时,转义字符不再转义。如何在Java中转义字符串中的字符?\n
\t
你应该使用Apache Commons Text中的StringEscapeUtils
类(你也可以在Apache Commons Lang3中找到这个类,但那个类已被弃用)。你会发现Apache Commons中还有很多其他产品,可能对Java开发中的其他问题有用,这样你就不会重新发明轮子。
您想要的特定调用与“Java转义”有关;API 调用是 StringEscapeUtils.escapeJava()。
。例如:
System.out.println(StringEscapeUtils.escapeJava("Hello\r\n\tW\"o\"rld\n"));
将打印出来:
Hello\r\n\tW\"o\"rld\n
该库中还有很多其他逃避的实用程序。你可以在 Maven Central 中找到 Apache Commons Text,然后将其添加到 Maven 项目中,如下所示:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.3</version>
</dependency>
如果您使用的是Gradle:
compile "org.apache.commons:commons-text:1.3"
这里的许多解决方案都建议添加Apache Commons Text并使用StringEscapeUtils。这里的其他一些解决方案是完全错误的。
潜在的解决方案如下:
/**
* escape()
*
* Escape a give String to make it safe to be printed or stored.
*
* @param s The input String.
* @return The output String.
**/
public static String escape(String s){
return s.replace("\\", "\\\\")
.replace("\t", "\\t")
.replace("\b", "\\b")
.replace("\n", "\\n")
.replace("\r", "\\r")
.replace("\f", "\\f")
.replace("\'", "\\'")
.replace("\"", "\\\"");
}
转义列表来自 Oracle 的列表。(请注意,首先转义,因为您不想在以后重新转义它。\\
此解决方案没有达到应有的速度,但它应该有效。理想情况下,您只需解析一次 String,就不需要继续重建 String 数组。对于小字符串,这应该没问题。
如果您从存储数据的角度考虑这个问题,还可以考虑将其转换为Base64表示形式 - 它快速,单次解析并且不会使用太多额外空间。