如何在Java中将字符串格式化程序显示为纯文本?

hfyxw5xn  于 2023-04-10  发布在  Java
关注(0)|答案(2)|浏览(112)

我在Java中有一个字符串,包含特殊字符,如\n和\t,它们被解释为控制字符,并在显示时产生新的行和制表符。我想将这些特殊字符显示为纯文本,例如,将“\n”显示为\n而不是作为新的一行。字符串还可以包含单引号或双引号(')(“)为了简洁,它可以包含任何可能的字符。

String text = "Hello\nWorld!";
text = text.replace("\\", "\\\\");
text = text.replace("\n", "\\n");
System.out.println(text);

在Java中有没有办法做到这一点?

velaa5lx

velaa5lx1#

Apache Commons有一个库,可以满足您似乎正在寻找的内容:https://commons.apache.org/proper/commons-text/javadocs/api-release/org/apache/commons/text/StringEscapeUtils.html#escapeJava(java.lang.String)
如果你不能使用Maven/Gradle,那么你很可能不得不通过用反斜杠转义所有特殊字符来滚动自己的字符,例如:

public static void main(String[] args) {
    String text = "Hello\nWorld!";
    String escapedText = escapeSpecialChars(text);
    System.out.println(escapedText);
}

private static String escapeSpecialChars(String text) {
    StringBuilder sb = new StringBuilder();
    for (char c : text.toCharArray()) {
        switch (c) {
            case '\\' -> sb.append("\\\\");
            case '\n' -> sb.append("\\n");
            case '\t' -> sb.append("\\t");
            case '\'' -> sb.append("\\'");
            case '\"' -> sb.append("\\\"");
            default -> sb.append(c);
        }
    }
    return sb.toString();
}
xmd2e60i

xmd2e60i2#

这里有一种使用流的方法。

String text = "He\f\bllo\nWor\rld!";
text = translate(text);

印刷品

He\f\bllo\nWor\rld!
  • 这将拆分字符串,然后用其转义的外部替换正确的控制字符。
private static Map<Character, String> map = Map.of('\t', "\\t", '\b', "\\b", '\n',
        "\\n", '\f', "\\f", '\\', "\\\'", '"', "\\\"", '\r', "\\r");
public static String translate(String text) {
    return text.chars()
            .mapToObj(ch -> map.getOrDefault((char)ch, Character.toString(ch)))
            .collect(Collectors.joining());    
}

相关问题