Java使用正则表达式统计字符串中指定字符出现次数

String sqlStr = "select count(*) from table where a = @{1} and b = @{2} and c =@{3}";
        String regex = "select\\s+count\\((\\*|[a-zA-z1-9.]+)\\)\\s+from.*";
        //判断是否匹配
        boolean matches = sqlStr.matches(regex);
        if (!matches) {
            System.out.println("sql format error");
        }
        //匹配占位符个数
        regex = "\\@\\{\\d+\\}";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(sqlStr);

        int i = 0;
        while (matcher.find()) {
            i++;
            System.out.println(matcher.group());
            System.out.println(matcher.start());
            System.out.println(matcher.end());
        }
        i = 0;
        while (matcher.find(i)) {
            System.out.println(i + "====" + matcher.group());
            i++;
        }

Pattern类常用方法:

1.Pattern.matcher(String regex,CharSequence input)

是一个静态方法,用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串.

Pattern.matches("\\d+","2223");//返回true 
Pattern.matches("\\d+","2223aa");//返回false,需要匹配到所有字符串才能返回true,这里aa不能匹配到 
Pattern.matches("\\d+","22bb23");//返回false,需要匹配到所有字符串才能返回true,这里bb不能匹配到 

2.Pattern.matcher(CharSequence input)

Pattern.matcher(CharSequence input)返回一个Matcher对象.
Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例. 
Pattern类只能做一些简单的匹配操作,要想得到更强更便捷的正则匹配操作,那就需要将Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持. 

Pattern p=Pattern.compile("\\d+"); 
Matcher m=p.matcher("22bb23"); 

Matcher类常用方法:

1.Matcher.matches()

matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true 

Pattern p=Pattern.compile("\\d+"); 
Matcher m=p.matcher("22bb23"); 
m.matches();//返回false,因为bb不能被\d+匹配,导致整个字符串匹配未成功. 
Matcher m2=p.matcher("2223"); 
m2.matches();//返回true,因为\d+匹配到了整个字符串

2.Matcher.find()

find()对字符串进行匹配(不必全部匹配,有部分匹配则返回true),匹配到的字符串可以在任何位置. find()方法是从前往后遍历的进兴匹配,返回是否匹配到,当find()方法返回true时,可以通过group()方法获取当前组匹配到的值;同时每次使用find后,可以使用start(),end(),group()返回匹配到的子字符串的位置以及详细信息。

start()返回匹配到的子字符串在字符串中的索引位置. 
end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置. 
group()返回匹配到的子字符串 

注意:只有当匹配操作成功,才可以使用start(),end(),group()三个方法,否则会抛出java.lang.IllegalStateException,也就是当matches(),lookingAt(),find()其中任意一个方法返回true时,才可以使用.

3.关于group()相关用法

        Pattern p = Pattern.compile("(\\d+,)(\\d+)");
        String s = "123,456-34,345-123,54385";
        Matcher m = p.matcher(s);
        while (m.find())
        {
            System.out.println("m.group():" + m.group()); //打印一个大组

            System.out.println("m.group(1):" + m.group(1)); //打印组1

            System.out.println("m.group(2):" + m.group(2)); //打印组2

            System.out.println();
        }
        System.out.println("捕获个数:groupCount()=" + m.groupCount());

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用正则表达式Java统计上传成功的次数,你可以使用Java正则表达式库和计数器变量。以下是一个示例,展示了如何使用Java的Pattern和Matcher类来统计上传成功的次数: ```java import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { // 假设有一段包含上传结果的字符串 String data = "Upload successful. Upload failed. Upload successful."; // 使用正则表达式统计上传成功次数 Pattern pattern = Pattern.compile("Upload successful"); Matcher matcher = pattern.matcher(data); int count = 0; while (matcher.find()) { count++; } System.out.println("Upload successful count: " + count); // 输出结果:Upload successful count: 2 } } ``` 在上述示例,我们首先导入了Java的Pattern和Matcher类。然后,我们定义了一个包含上传结果的字符串。接下来,使用Pattern类的`compile`方法和正则表达式`Upload successful`创建一个匹配模式。然后,我们使用Matcher类的`matcher`方法将该模式应用于字符串。通过调用Matcher类的`find`方法,我们可以找到匹配的次数并进行计数。在每次找到匹配时,我们将计数器变量递增。最后,我们打印出上传成功的次数。 请注意,正则表达式的具体规则会根据你的需求而有所不同。上述示例使用的`Upload successful`表示匹配字符串的"Upload successful"文本。你可以根据实际情况调整正则表达式来匹配不同的模式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值