当我有一个字符串,如:
String x = "hello\nworld";
在使用System.out时,如何让Java打印实际的转义字符(而不是将其解释为转义字符)?例如,当调用
System.out
System.out.print(x);
我希望看到:
hello\nworld
而不是:
hello world
我希望看到实际的转义字符用于调试目的。
vc9ivgsu1#
使用Java库“org.apache.commons.lang”中的方法“字符串转义工具.转义Java”
String x = "hello\nworld"; System.out.print(StringEscapeUtils.escapeJava(x));
3ks5zfa02#
一种方法是:
public static String unEscapeString(String s){ StringBuilder sb = new StringBuilder(); for (int i=0; i<s.length(); i++) switch (s.charAt(i)){ case '\n': sb.append("\\n"); break; case '\t': sb.append("\\t"); break; // ... rest of escape characters default: sb.append(s.charAt(i)); } return sb.toString(); }
然后运行System.out.print(unEscapeString(x))。
System.out.print(unEscapeString(x))
iugsix8n3#
必须转义斜杠本身:
String x = "hello\\nworld";
zf9nrax14#
System.out.println("hello \\nworld");
iecba09b5#
Java的转义序列与C相同。使用String x = "hello\\nworld";
8yparm6h6#
只需转义转义字符。
mo49yndu7#
尝试转义反斜杠,如\\n
\\n
rjee0c158#
下面的代码产生八进制转义序列。修改replacement函数以产生你所需要的。
Pattern .compile ("[^\\p{Graph}]") .matcher ("A\tB\nC") .replaceAll ( (final MatchResult r) -> String .format ("\\\\%03o", + r .group () .charAt (0)))
另一种可能性是使用String .format ("^%c", r .group () .charAt (0) + '@')-但它只处理控制字符。
String .format ("^%c", r .group () .charAt (0) + '@')
dly7yett9#
您可能需要检查这个方法。虽然这可能比您预期的要多。或者,使用字符串替换方法来替换新行、回车和制表符。请记住,还有Unicode和十六进制序列这样的东西。
9条答案
按热度按时间vc9ivgsu1#
使用Java库“org.apache.commons.lang”中的方法“字符串转义工具.转义Java”
3ks5zfa02#
一种方法是:
然后运行
System.out.print(unEscapeString(x))
。iugsix8n3#
必须转义斜杠本身:
zf9nrax14#
System.out.println("hello \\nworld");
iecba09b5#
Java的转义序列与C相同。使用
String x = "hello\\nworld";
8yparm6h6#
只需转义转义字符。
mo49yndu7#
尝试转义反斜杠,如
\\n
rjee0c158#
下面的代码产生八进制转义序列。修改replacement函数以产生你所需要的。
另一种可能性是使用
String .format ("^%c", r .group () .charAt (0) + '@')
-但它只处理控制字符。dly7yett9#
您可能需要检查这个方法。虽然这可能比您预期的要多。或者,使用字符串替换方法来替换新行、回车和制表符。请记住,还有Unicode和十六进制序列这样的东西。