这样的事情怎么样?它可以 100% 工作......唯一的弱点是我对每个需要的字符都有一个明确的案例。我不确定是否有办法解决这个问题,尽管也许你可以通过为整个字符范围做一个案例来解决这个问题。我不认为 RegEx 可以匹配像这样的字符定义\u0073
,但我不确定。
public static void main(String[] args) {
String unescaped = "\n\u0073";
System.out.println("Version 1:\n" + unescaped);
System.out.println("\nVersion 2:");
printEscaped(unescaped);
}
public static void printEscaped(String unescaped) {
for (char c : unescaped.toCharArray()) {
switch (c) {
case ('\n'):
System.out.print("\\n");
break;
case ('\u0073'):
System.out.print("\\u0073");
break;
default:
System.out.print(c);
}
}
}
输出:
Version 1:
s
Version 2:
\n\u0073
另一个更广泛使用的潜在问题是它适用于字符,即使它们不是由转义序列定义的。例如,printEscaped("s")
将打印相同的内容printEscaped("\u0073")
:它们都将打印\u0073
。因此,您必须小心仅在您确定要以“转义符号”打印每个字符的字符串上调用该方法。