在Java中打印原始字符串

3

Say I have a string like this:

String message = "Hi \n Prakash";

我想要按照原样打印messsage,而不是为\n打印一个新行。

所以期望的输出是:
messsage\n
Hi \n Prakash

最初的回答
而不是
Hi
 Prakash

请注意,我们不允许修改字符串message。我该怎么做?
编辑:我使用\n只是举例。我的字符串中可能会有类似的字符,比如\t

3
你所拥有的字符串值正好与你获得的输出相同,你的字符串中没有存储文本序列\n。你在尝试做什么? - Progman
1
请注意,我们不允许修改字符串消息。 - 你不能修改一个StringString是不可变的 - Turing85
1
你所需要的是基本上是字节码操作。正如你应该知道的那样,你在源代码 .java 文件中的字符序列首先被转换为字节码。这将用等效的字节码替换你的源代码。JVM 在任何时候都不会看到你字符串中的斜杠字面量。当它进入 JVM 时已经太晚了。你必须通过检测和替换每个可能的可转义字符来实现这一点。 - Tibrogargan
2
@prakasht 正确,的确如此,这就是为什么你不能在字符串字面值中使用\u0022。我的观点是,你无法以源代码中的形式精确打印出消息:"Hi \u005cn Prakash" 无法与 "Hi \n Prakash" 区分开来,因此你无法知道应该打印哪种形式。 - Andy Turner
1
@prakasht \u005c 是一个转义序列,用于表示 \ 这个字符,因此在生成字节码时,\u005cn 会被转换为 \n,然后再在 JVM 看到它之前被转换为换行符。 - Tibrogargan
显示剩余10条评论
2个回答

3
这可以通过使用 Apache Commons Text 的 StringEscapeUtils 类来实现。
import org.apache.commons.lang3.StringEscapeUtils;

String message = "Hi \n Prakash";
System.out.println(StringEscapeUtils.escapeJava(message));

输出为:
Hi \n Prakash

感谢Dima在回答中提供链接。

在这里工作得很好,+1 - Joel Lopes
在这里工作得很好,+1 - undefined

0
你想对特殊字符进行转义。如果这是你的代码,你想要转义几个字符串,那么最好的方法是添加一个额外的斜杠。
String message = "Hi \\n Prakash";

输出:

你好\nPrakash

但是如果你想从文件中读取文本,并将其作为原样输出,包括特殊字符,请参考以下答案如何在Java中转义字符串?


这是我个人认为的正确答案。 - prakasht
@prakasht它没有展示如何添加额外的斜杠。对我来说,创建一个带有额外斜杠的文字似乎并不实用... - Andrew Tobilko
无论如何,不能解决字符串中包含任意转义字符的一般情况。 - Tibrogargan
@AndrewTobilko 上一个链接中提供了正确答案。答案本身没有任何用处。 - prakasht

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接