Java String ReplaceAll方法给出非法重复错误?
我有一个字符串,当我尝试运行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 {
如何替换"{"
的出现?
A {
是用于范围重复的正则表达式元字符{min,max}
。 要匹配文字{
你需要通过在它前面用\\
来逃避它:
str = str.replaceAll("\\{", "\n"); // does work
如果你真的打算替换单个字符而不是正则表达式(这是你似乎想要在这里做的),你应该使用.replace()
,而不是.replaceAll()
。 尽管它的名称, .replace()
将替换所有出现,而不仅仅是第一次出现。
如果你想知道, String
实现了CharSequence
,那么.replace("{", "\n")
将起作用。
逃避它:
str = str.replaceAll("\\{", "\n");
这是必需的,因为replaceAll()
的第一个参数是正则表达式 , {
在Java正则表达式中具有特殊含义(它是重复运算符,因此是错误消息)。
- 本地类不兼容exception:从IDE运行spark standalone时
- 将滚动条添加到JFreeChart 3DBarChart
- 为什么我们必须将Collectors.toList()返回的List转换为List ,即使Stream的元素已经映射到Integer?
- 如何使用selenium(java)在IE中打开新选项卡并在该选项卡中打开一个URL(不是窗口)
- 尝试使用扫描仪时“无法解析为类型”
- 在Spring Boot中放置@Bean的位置?
- 如何在Java servlet Web应用程序中获取未捕获的exception
- 无法复制:“比较方法违反了其总合同!”
- JSTL c:forEach导致@ViewScoped bean在每个请求上调用@PostConstruct