【问题标题】:Is there a Java function which parses escaped characters?是否有解析转义字符的 Java 函数?
【发布时间】:2009-08-25 10:23:06
【问题描述】:

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

类似这样的:

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

还是我必须手动搜索和替换所有转义字符?

【问题讨论】:

  • 您的意思是要用换行符替换 \\n 吗?

标签: java string


【解决方案1】:

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

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

【讨论】:

  • 这就是我想要的!遇到来自 php 的 json_encode 的 unicode 转义字符问题
【解决方案2】:

Anthony 99% 是对的——因为反斜杠也是正则表达式中的保留字符,所以需要再次转义:

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

【讨论】:

    【解决方案3】:

    只需使用字符串自己的 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 开发人员)

    【讨论】:

    • 如果我对每个可转义的字符(即 8 次)执行 replaceAll 操作,这不会消耗性能吗? (java.sun.com/docs/books/tutorial/java/data/characters.html)
    • 对不起,我只是为您的简单案例展示了一个答案(我们中的许多人都在下意识地这样做并不能真正回答您的问题)。这就是为什么我将您指向 Matcher 类,它与 StringBuffer 结合,您可以一次性创建一个结果字符串。
    【解决方案4】:

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

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

    这处理所有可能的字符

    【讨论】:

      猜你喜欢
      • 2011-01-02
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多