是否有一个解析转义字符的Java函数?

时间:2009-08-25 10:23:07

标签: java string

我正在寻找内置的Java函数,例如可以将"\\n"转换为"\n"

这样的事情:

assert parseFunc("\\n") = "\n"

或者我是否必须手动搜索并替换所有转义的字符?

4 个答案:

答案 0 :(得分:9)

您可以使用Apache Commons Lang中的StringEscapeUtils.unescapeJava(s)。它适用于所有转义序列,包括Unicode字符(即\u1234)。

https://commons.apache.org/lang/apidocs/org/apache/commons/lang3/StringEscapeUtils.html#unescapeJava-java.lang.String-

答案 1 :(得分:3)

Anthony 99%是正确的 - 因为反斜杠也是正则表达式中的保留字符,它需要第二次转义:

result = myString.replaceAll("\\\\n", "\n");

答案 2 :(得分:1)

只需使用字符串自己的replaceAll方法。

result = myString.replaceAll("\\n", "\n");

但是,如果您想匹配所有转义序列,那么您可以使用匹配器。有关使用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());

根据要处理的转义的数量和类型,您只需要使赋值更复杂。 (警告这是空气代码,我不是Java开发人员)

答案 3 :(得分:0)

如果您不想列出所有可能的转义字符,可以将其委托给属性行为

    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);

这会处理所有可能的字符