【发布时间】:2009-08-25 10:23:06
【问题描述】:
我正在寻找一个内置的 Java 函数,例如可以将 "\\n" 转换为 "\n"。
类似这样的:
assert parseFunc("\\n") = "\n"
还是我必须手动搜索和替换所有转义字符?
【问题讨论】:
-
您的意思是要用换行符替换 \\n 吗?
我正在寻找一个内置的 Java 函数,例如可以将 "\\n" 转换为 "\n"。
类似这样的:
assert parseFunc("\\n") = "\n"
还是我必须手动搜索和替换所有转义字符?
【问题讨论】:
您可以使用Apache Commons Lang 中的StringEscapeUtils.unescapeJava(s)。它适用于所有转义序列,包括 Unicode 字符(即\u1234)。
【讨论】:
Anthony 99% 是对的——因为反斜杠也是正则表达式中的保留字符,所以需要再次转义:
result = myString.replaceAll("\\\\n", "\n");
【讨论】:
只需使用字符串自己的 replaceAll 方法即可。
result = myString.replaceAll("\\n", "\n");
但是,如果您想匹配所有转义序列,则可以使用 Matcher。有关使用 Matcher 的非常基本的示例,请参阅 http://www.regular-expressions.info/java.html。
Pattern p = Pattern.compile("\\(.)");
Matcher m = p.matcher("This is tab \\t and \\n this is on a new line");
StringBuffer sb = new StringBuffer();
while (m.find()) {
String s = m.group(1);
if (s == "n") {s = "\n"; }
else if (s == "t") {s = "\t"; }
m.appendReplacement(sb, s);
}
m.appendTail(sb);
System.out.println(sb.toString());
您只需要根据您要处理的转义数和类型对 s 进行更复杂的赋值。 (警告这是空代码,我不是 Java 开发人员)
【讨论】:
如果您不想列出所有可能的转义字符,可以将其委托给属性行为
String escapedText="This is tab \\t and \\rthis is on a new line";
Properties prop = new Properties();
prop.load(new StringReader("x=" + escapedText + "\n"));
String decoded = prop.getProperty("x");
System.out.println(decoded);
这处理所有可能的字符
【讨论】: