如何在Java中转义字符串?

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表示形式——它是快速、单次解析并且不会使用太多额外空间。

  • .replace("\'", "\\'") 不是必需的。否则,感谢您提供这个有用的答案。 (4认同)

cod*_*ict 5

使用方法:

\\n\\t

一些以反斜杠(\)开头的字符形成转义序列,并对编译器具有特殊含义。因此,根据您的情况\n\t它们被视为特殊字符(分别是换行符和制表符)。因此,我们需要转义使用反斜杠来进行处理n和按t字面意义处理。


Gop*_*opi 5

StringEscapeUtils非常适合与字符串相关的操作