如何使控制字符可见?

我必须显示带有可见控制字符的字符串,如\n\t等。我试过像这里的引用,我也试过做类似的事情

 Pattern pattern = Pattern.compile("\\p{Cntrl}"); Matcher matcher = pattern.matcher(str); String controlChar = matcher.group(); String replace = "\\" + controlChar; result = result.replace(controlChar, replace); 

但我失败了

替代方法:使用可见字符而不是转义序列。

要使控制字符“可见”,请使用Unicode 控制图片块中的字符,即将\u2400 \u0000\u241F映射到\u2400\u241F ,将\u2421 \u007F\u2421

请注意,这需要输出为Unicode,例如UTF-8,而不是像ISO-8859-1这样的单字节代码页。

 private static String showControlChars(String input) { StringBuffer buf = new StringBuffer(); Matcher m = Pattern.compile("[\u0000-\u001F\u007F]").matcher(input); while (m.find()) { char c = m.group().charAt(0); m.appendReplacement(buf, Character.toString(c == '\u007F' ? '\u2421' : (char) (c + 0x2400))); if (c == '\n') // Let's preserve newlines buf.append(System.lineSeparator()); } return m.appendTail(buf).toString(); } 

使用上面的方法输出作为输入文本:

 ␉private static String showControlChars(String input) {␍␊ ␉␉StringBuffer buf = new StringBuffer();␍␊ ␉␉Matcher m = Pattern.compile("[\u0000-\u001F\u007F]").matcher(input);␍␊ ␉␉while (m.find()) {␍␊ ␉␉␉char c = m.group().charAt(0);␍␊ ␉␉␉m.appendReplacement(buf, Character.toString(c == '\u007F' ? '\u2421' : (char) (c + 0x2400)));␍␊ ␉␉␉if (c == '\n')␍␊ ␉␉␉␉buf.append(System.lineSeparator());␍␊ ␉␉}␍␊ ␉␉return m.appendTail(buf).toString();␍␊ ␉}␍␊ 

只需用转义版本(即'\\n' )替换'\n'出现,如下所示:

 final String result = str.replace("\n", "\\n"); 

例如:

 public static void main(final String args[]) { final String str = "line1\nline2"; System.out.println(str); final String result = str.replace("\n", "\\n"); System.out.println(result); } 

会产生输出:

 line1 newline line1\nnewline 

只是做

 result = result.replace("\\", "\\\\"); 

将工作!!