如何使控制字符可见?
我必须显示带有可见控制字符的字符串,如\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("\\", "\\\\");
将工作!!