java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0

使用repalceAll 方法出现java.util.regex.PatternSyntaxException: Dangling meta character ‘*‘ near index 0异常

代码如下:

1     @Test
2     public void testReplaceAll(){
3         String sql = "select * from per_handle where id not in(‘3ce7405509414105a65e7456987e7393‘)";
4          String countSql = sql.replaceAll("*", " count(*) ");
5
6         System.out.println(countSql);
7     }    

以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、对"*"进行转义处理,使之成为一个普通字符

1 @Test
2 public void testReplaceAll(){
3     String sql = "select * from per_handle where id not in(‘3ce7405509414105a65e7456987e7393‘)";
4     String countSql = sql.replaceAll("\\*", " count(*) ");
5     System.out.println(countSql);
6 }

2、使用replace方法代替replaceAll方法

1 @Test
2 public void testReplaceAll(){
3     String sql = "select * from per_handle where id not in(‘3ce7405509414105a65e7456987e7393‘)";
4     String countSql = sql.replace("*", " count(*) ");
5     System.out.println(countSql);
6 }

这种方法能够成功的原因是:

String java.lang.String.replace(CharSequence target, CharSequence replacement)

replace方法的第一参数为字符或字符串,所以默认会将"*"当成普通字符串。

java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0

时间: 2024-10-16 23:32:59

java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0的相关文章

java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \ ^

1 String a = "1991\12\16"; 2 String[] split = a.split("\\"); 3 System.out.println(new Gson().toJson(split)); 报错java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \  ^ 报这个错的原因是因为在java中“\”是一个转义字符,所以需要用两个代表一个.例

Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 0 [ ^

Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 0 [ ^ 出现此错误应该是字符转义出现问题: System.out.println(str.replaceAll("[", "22")); 解决方案:在[之前加上\\ System.out.println(str.replaceAll(&qu

异常 java.util.regex.PatternSyntaxException:

可变参数是在JDK1.5之后出来的一个行特性,也是一个比较好用的东西 想起好多jfinal还有其他框架的查询方法就有好多用到了可变参数,自己也写了个这样的方法 public class Test{    public static void main(String[] args)    {     String  sql=test("select * from table where id=? and state=? and name like '%?%'",1,2,"lao

Java正则表达式java.util.regex类的简单使用

1.什么是正则表达式? 正则表达式(regular expression)是根据字符串集合内每个字符串共享的共同特性来描述字符串集合的一种途径.正则表达式可以用于搜索.编辑或者处理文本和数据. Java.util.regex主要包含以下三类: pattern类: pattern 对象是一个正则表达式的编译表示.Pattern 类没有公共构造方法.要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象.该方法接受一个正则表达式作为它的第一个参数. Ma

【java】java.util.regex.Pattern和java.util.regex.Matcher简单示例

1 package 正则; 2 3 import java.util.regex.Matcher; 4 import java.util.regex.Pattern; 5 6 public class Test_regex { 7 public static void main(String[] args) { 8 String str="a1b22c333d4444e_55_555f666666g7777777"; 9 String regex="\\w*"; 1

java正则表达式及java.util.regex包的学习

参考http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html package sunfa.lx; import java.util.Arrays; import java.util.regex.Pattern; /** * java.util.regex包负责对字符序列进行正则表达式匹配 * Pattern负责编译 * Matcher负责匹配 * --------------- * 正

RE validation in Java EE(java.util.regex.Pattern)

java.util.regex.Pattern pattern 对象是一个正则表达式的编译表示.Pattern 类没有公共构造方法.要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象.该方法接受一个正则表达式作为它的第一个参数. Pattern类中有两个最常用的方法: (1)boolean isMatch = Pattern.matches("regExp", "string");matches()方法表示正则表达式

JDK的帧--java.util包装工具库

题词 JDK,Java Development Kit. 首先,我们必须认识到,,JDK但,但设置Java只有基础类库.它是Sun通过基础类库开发,这是唯一的.JDK书写总结的类库.从技术含量来说,还是在一个层级上,它们都是须要被编译成字节码.在JRE中执行的.JDK编译后的结果就是jre/lib下的rt.jar.我们学习使用它的目的是加深对Java的理解,提高我们的Java编码水平. 本系列全部文章基于的JDK版本号都是1.7.16. 源代码下载地址:https://jdk7.java.net

java.util.regx Demo

import java.util.regex.Matcher;import java.util.regex.Pattern; public class TestRegex { public static void main(String[] args) { //时间正则表达式 String reg = "(.*)-(.*) (.*):(.*)"; String reg2 = "(.*)(0[1-9]|1[1-2])/(0[1-9]|[1-2]\\d|3[0-1]) ([0-2