如何使控制字符可见?

时间:2016-11-30 15:50:17

标签: java regex string

我必须显示包含Error in ./HomePage class HomePage - caused by: Cannot read property 'name' of undefined \n等可见控制字符的字符串。 我试过像here这样的引语,我也试过做像

这样的事情
\t

但我失败了

3 个答案:

答案 0 :(得分:3)

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

要使控制字符“可见”,请使用Unicode Control Pictures块中的字符,即将\u0000 - \u001F映射到\u2400 - \u241F,和\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();␍␊
␉}␍␊

答案 1 :(得分:1)

只需使用转义版本(即'\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

答案 2 :(得分:0)

刚做

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

会起作用!!