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() 的区别