我在 Java 中有一个字符串,其中包含特殊字符,例如 并且被解释为控制字符并在显示时生成新行和制表符。我想将这些特殊字符显示为纯文本,例如显示“ “ 作为 而不是作为一条新线。该字符串还可以包含单引号或双引号 (')(") 为了简洁它可以包含任何可能的字符。
String text = "Hello\nWorld!";
text = text.replace("\\", "\\\\");
text = text.replace("\n", "\\n");
System.out.println(text);
有没有办法在 Java 中实现这一点?
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();
}
这是使用流的一种方式。
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());
}