如何在Java中转义字符串?

如何在Java中转义字符串?,java,string,escaping,Java,String,Escaping,我正在用Java读取一个源文件,但当我打印它(sysout)时,转义字符不再转义。如何在Java中对字符串中的\n和\t等字符进行转义?使用: \\n和\\t 某些字符前面带有反斜杠(\)形成了一个转义序列,对编译器具有特殊意义。因此,在您的情况下,\n和\t被视为特殊(分别为换行符和制表符)。因此,我们需要避开反斜杠,使n和t按字面意思处理。给定字符串s s = s.replace("\\", "\\\\"); 将所有\替换为\适用于字符串相关的操作您应该使用中的类(您也可以在Apache

我正在用Java读取一个源文件,但当我打印它(sysout)时,转义字符不再转义。如何在Java中对字符串中的
\n
\t
等字符进行转义?

使用:

\\n
\\t


某些字符前面带有反斜杠(
\
)形成了一个转义序列,对编译器具有特殊意义。因此,在您的情况下,
\n
\t
被视为特殊(分别为换行符和制表符)。因此,我们需要避开反斜杠,使
n
t
按字面意思处理。

给定
字符串s

s = s.replace("\\", "\\\\");
将所有
\
替换为
\

适用于字符串相关的操作您应该使用中的类(您也可以在Apache Commons Lang3中找到该类,但该类已弃用)。您会发现,apachecommons中有很多其他产品可能对解决Java开发中的其他问题很有用,这样您就不会重新发明轮子了

您想要的特定调用与“Java转义”有关;API调用是。例如:

System.out.println(StringEscapeUtils.escapeJava("Hello\r\n\tW\"o\"rld\n")
将打印:

Hello\r\n\tW\"o\"rld\n
该库中还有很多其他转义实用程序。您可以找到并将其添加到Maven项目中,如下所示:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-text</artifactId>
    <version>1.3</version>
</dependency>

这里的许多解决方案建议添加和使用。这里的其他一些解决方案完全是错误的

潜在的解决方案如下:

/**
*逃逸
*
*转义给定字符串以使其安全地打印或存储。
*
*@param是输入字符串。
*@返回输出字符串。
**/
公共静态字符串转义(字符串s){
返回s.replace(“\\”,“\\\”)
.替换(“\t”和“\\t”)
.替换(“\b”和“\\b”)
.替换(“\n”和“\\n”)
.替换(“\r”和“\\r”)
.替换(“\f”和“\\f”)
.替换(“\”,“\ \”)
.替换(“\”,“\ \”);
}
转义列表来自Oracle的。(请注意,
\\
是先转义的,因为您不想在以后重新转义它。)

这个解决方案并没有可能的那么快,但它应该可以工作。理想情况下,您只需解析字符串一次,而不需要继续重建字符串数组。对于小字符串,这应该是好的


如果从存储数据的角度来考虑这个问题,也可以考虑把它转换成表示形式——它是快速的、单一的解析和使用不太多的额外空间。

你可以将当前代码张贴以供阅读和输出吗?你在源文件中是如何阅读的?你到底是怎么印刷的?从您的描述中,我不清楚转义序列在何处转换为它们所表示的转义字符。我正在读取的文件包含
\n
,我想通过编程将其转换为
\\n
这是错误的,因为\n被视为一个字符,因此将不会发现\被\\替换。不需要替换(\',“\\'”)。否则,谢谢你的回答。
compile "org.apache.commons:commons-text:1.3"