Java String ReplaceAll 方法给出非法重复错误?

Posted

技术标签:

【中文标题】Java String ReplaceAll 方法给出非法重复错误?【英文标题】:Java String ReplaceAll method giving illegal repetition error? 【发布时间】: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   

如何替换 "" 的出现?

【问题讨论】:

【参考方案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 运算符,因此会出现错误消息) .

【讨论】:

以上是关于Java String ReplaceAll 方法给出非法重复错误?的主要内容,如果未能解决你的问题,请参考以下文章

Java:理解 String replaceAll() 方法

Java-String的replaceAll()方法(力扣20题相关)

JAVA中appendReplacement()方法和replaceAll()方法有啥区别。。

String replace() 和 replaceAll() 的区别

String.replaceAll()方法替换字符串中的反斜杠()

java String的replaceAll方法替换中间部分下划线以后的文字的正则表达式