java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
2024-10-19 11:44:29
使用repalceAll 方法出现java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0异常
代码如下:
@Test
public void testReplaceAll(){
String sql = "select * from per_handle where id not in('3ce7405509414105a65e7456987e7393')";
String countSql = sql.replaceAll("*", " count(*) "); System.out.println(countSql);
}
以junit测试方式运行后报了如下错误:
java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
出现这个错误与repalceAll方法有关,查阅java API文档可以看到 replaceAll方法结构如下:
String java.lang.String.replaceAll(String regex, String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
第一个参数是一个正则表达式,第二个参数为替换后的字符串。
由于"*"在正则表达式中有特殊意义,导致报错。
尝试了两种解决方法:
1、对"*"进行转义处理,使之成为一个普通字符
@Test
public void testReplaceAll(){
String sql = "select * from per_handle where id not in('3ce7405509414105a65e7456987e7393')";
String countSql = sql.replaceAll("\\*", " count(*) ");
System.out.println(countSql);
}
2、使用replace方法代替replaceAll方法
@Test
public void testReplaceAll(){
String sql = "select * from per_handle where id not in('3ce7405509414105a65e7456987e7393')";
String countSql = sql.replace("*", " count(*) ");
System.out.println(countSql);
}
这种方法能够成功的原因是:
String java.lang.String.replace(CharSequence target, CharSequence replacement)
replace方法的第一参数为字符或字符串,所以默认会将"*"当成普通字符串。
最新文章
- linux命令学习(一)—— 文件和目录管理命令
- 目录结构-内置(AJAX)帮助文档
- WebDriver使用指南(完整篇)
- 模式识别 - 处理多演示样例学习(MIL)特征(matlab)
- 《agile java》First : 起步 + 章节练习题
- Iterator荟萃
- ubuntu ~/.bash_history
- 在MFC程序中使用XML文件配置工具栏
- WASP_百度百科
- UVa 740 - Baudot Data Communication Code
- [Ext.Net] 1.x GridPanel列数过多给Menu菜单加滚动条
- HttpWebRequest类库注意事项以及常见问题
- java基础(一):谈谈java内存管理与垃圾回收机制
- layui加载层
- Spring 使用 feign时设置header信息
- jQuery计算文本宽度和input标签根据输入字符动态自适应宽度的实现
- WebApi 后台获取token值
- k-vim安装及The ycmd server SHUT DOWN (restart with ':YcmRestartServer')这种错误的解决方法
- Sublime Text 支持GBK , 解决中文乱码问题
- CLOS网络的无阻塞条件