Mar*_*ius 26 java string escaping
我正在阅读Java中的源文件,但是当我打印它(sysout)时,转义的字符不再被转义.我怎样才能逃避像字符\n和\t在Java中的字符串?
sch*_*tic 32
您应该使用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")
Run Code Online (Sandbox Code Playgroud)
打印出来:
Hello\r\n\tW\"o\"rld\n
Run Code Online (Sandbox Code Playgroud)
该库中还有许多其他转义实用程序.您可以在Maven Central中找到Apache Commons Text,然后将它添加到您的Maven项目中,如下所示:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Gradle:
compile "org.apache.commons:commons-text:1.3"
Run Code Online (Sandbox Code Playgroud)
小智 12
这里的许多解决方案都建议添加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("\"", "\\\"");
}
Run Code Online (Sandbox Code Playgroud)
转义列表来自 Oracle 的list。(请注意,\\它首先被转义,因为您不想稍后重新转义它。)
这个解决方案没有想象的那么快,但它应该可以工作。理想情况下,您只需解析 String 一次,而无需继续重建 String 数组。对于小字符串,这应该没问题。
如果您从存储数据的角度考虑这一点,还可以考虑将其转换为Base64表示形式——它是快速、单次解析并且不会使用太多额外空间。
使用方法:
\\n 和 \\t
一些以反斜杠(\)开头的字符形成转义序列,并对编译器具有特殊含义。因此,根据您的情况\n,\t它们被视为特殊字符(分别是换行符和制表符)。因此,我们需要转义使用反斜杠来进行处理n和按t字面意义处理。
| 归档时间: |
|
| 查看次数: |
48403 次 |
| 最近记录: |