【问题标题】:Java String ReplaceAll method giving illegal repetition error?Java String ReplaceAll 方法给出非法重复错误?
【发布时间】:2012-01-19 10:31:39
【问题描述】:

我有一个字符串,当我尝试运行 replaceAll 方法时,我收到了这个奇怪的错误:

String str = "something { } , op";
str = str.replaceAll("o", "\n"); // it works fine
str = str.replaceAll("{", "\n"); // does not work

我得到一个奇怪的错误:

Exception in thread "main" java.util.regex.PatternSyntaxException:
Illegal repetition {  

如何替换 "{" 的出现?

【问题讨论】:

    标签: java regex string replaceall


    【解决方案1】:

    如果你真的打算替换单个字符而不是正则表达式(这似乎是你在这里想要做的),你应该使用.replace(),而不是.replaceAll()。尽管有它的名字,.replace() 将替换所有出现,而不仅仅是第一个。

    如果你想知道,String 实现了CharSequence,所以.replace("{", "\n") 可以工作。

    【讨论】:

    • 天哪……我已经使用 Groovy 多年了,一直认为 replace() 只是替换了第一个实例。这就是我不看文档的结果!
    【解决方案2】:

    { 是用于范围重复的正则表达式元字符{min,max}。要匹配文字 {,您需要在它前面加上 \\ 来转义它:

    str = str.replaceAll("\\{", "\n"); // does work
    

    【讨论】:

      【解决方案3】:

      逃脱它:

      str = str.replaceAll("\\{", "\n"); 
      

      这是必需的,因为replaceAll() 的第一个参数是regular expression,而{ 在 Java 正则表达式中具有特殊含义(它是一个 repetition 运算符,因此会出现错误消息) .

      【讨论】:

        猜你喜欢
        • 2014-10-08
        • 2013-09-03
        • 2011-07-08
        • 2022-08-18
        • 1970-01-01
        • 2017-10-16
        • 2016-06-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多