【问题标题】:Java replaceAll escape characters into double escapeJava将所有转义字符替换为双重转义
【发布时间】:2013-11-07 12:36:48
【问题描述】:

我有一个从输入字段接收到的字符串值。

String searchingText = getText();

收到一个字符串后,我搜索这个字符串。但如果字符串包含\ 符号,我的搜索将失败。

我知道特殊字符并尝试替换:

searchingText = searchingText.replaceAll("\\","\\\\");

但它给了我错误并且应用程序已关闭。

Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1

经过研究,我创建了一个正则表达式并尝试用匹配器替换:

    Map<String,String> sub = new HashMap<String,String>();
    sub.put("\n", "\\\\n");
    sub.put("\r", "\\\\r");
    sub.put("\t", "\\\\t");

    StringBuffer result = new StringBuffer();
    Pattern regex = Pattern.compile("\\n|\\r|\\t");
    Matcher matcher = regex.matcher(bodySearchText);

最后我会想要一个字符串 - searchingText = \\ 而不是 searchingText = \

请提供任何解决方案。

【问题讨论】:

  • “但它给了我错误并且应用程序已关闭” - 错误/异常是什么?请发布堆栈跟踪。
  • @laalto 我已经更新了我的答案

标签: java android regex replace


【解决方案1】:

你应该这样做:

string = string.replaceAll("\\\\", "\\\\\\\\");

请注意,在 Java 中,\ 写作\\。所以replaceAll 会将\\ 视为\,这不是你想要的。

相反,您可以使用replace,它接受字符串而不是正则表达式。

【讨论】:

  • replace() 还不够吗?
  • 我有一个解决方案,但你的答案几乎是正确的。我会编辑它。
  • 我会在 6 分钟后接受。 sistem 阻止了此操作,因为我的声誉价值不大。
【解决方案2】:

改变这个

searchingText = searchingText.replaceAll("\\","\\\\");

searchingText = searchingText.replaceAll("\\\\","\\\\\\");

replaceAll() 将把\\ 当作\

更多详情请阅读here

【讨论】:

    猜你喜欢
    • 2013-01-29
    • 2012-03-24
    • 2011-03-02
    • 1970-01-01
    • 2014-11-01
    • 2015-10-27
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多