使用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方法的第一参数为字符或字符串,所以默认会将"*"当成普通字符串。

最新文章

  1. linux命令学习(一)—— 文件和目录管理命令
  2. 目录结构-内置(AJAX)帮助文档
  3. WebDriver使用指南(完整篇)
  4. 模式识别 - 处理多演示样例学习(MIL)特征(matlab)
  5. 《agile java》First : 起步 + 章节练习题
  6. Iterator荟萃
  7. ubuntu ~/.bash_history
  8. 在MFC程序中使用XML文件配置工具栏
  9. WASP_百度百科
  10. UVa 740 - Baudot Data Communication Code
  11. [Ext.Net] 1.x GridPanel列数过多给Menu菜单加滚动条
  12. HttpWebRequest类库注意事项以及常见问题
  13. java基础(一):谈谈java内存管理与垃圾回收机制
  14. layui加载层
  15. Spring 使用 feign时设置header信息
  16. jQuery计算文本宽度和input标签根据输入字符动态自适应宽度的实现
  17. WebApi 后台获取token值
  18. k-vim安装及The ycmd server SHUT DOWN (restart with ':YcmRestartServer')这种错误的解决方法
  19. Sublime Text 支持GBK , 解决中文乱码问题
  20. CLOS网络的无阻塞条件

热门文章

  1. DataTable
  2. log4cplus 直接创建logger 对象
  3. 恢复CRM plugin
  4. Request.ServerVariables
  5. EF执行SQL
  6. 动态主机配置协议(DHCP)如何启动和关闭
  7. Python爬虫学习1
  8. C++设计模式-Memento备忘录模式
  9. jQuery.ajax()调用asp.net后台方法
  10. pod install后无反应