如何使控制字符可见? [英] How to make control characters visible?
本文介绍了如何使控制字符可见?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我必须显示带有可见控制字符的字符串,例如 \ n
, \t
等等。
我试过像这里的报价,我也有试图做类似的事情
I have to display string with visible control characters like \n
, \t
etc.
I have tried quotations like here, also I have tried to do something like
Pattern pattern = Pattern.compile("\\p{Cntrl}");
Matcher matcher = pattern.matcher(str);
String controlChar = matcher.group();
String replace = "\\" + controlChar;
result = result.replace(controlChar, replace);
但我失败了
推荐答案
替代方法:使用可见字符代替转义序列。
要使控制字符可见,请使用来自Unicode的字符控制图片块,即地图 \ u0000
- \\\001001
到 \ u2400
- \ u241F
, \ u007F
到 \ u2421
。
To make control characters "visible", use the characters from the Unicode Control Pictures Block, i.e. map \u0000
-\u001F
to \u2400
-\u241F
, and \u007F
to \u2421
.
请注意,这需要输出为Unicode,例如UTF-8,不是像ISO-8859-1那样的单字节代码页。
Note that this requires output to be Unicode, e.g. UTF-8, not a single-byte code page like 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();
}
使用上述方法输出作为输入文本:
Output using method above as input text:
␉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();␍␊
␉}␍␊
这篇关于如何使控制字符可见?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文