博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Matcher 类中的group(),group(int i),groupCount()
阅读量:6570 次
发布时间:2019-06-24

本文共 1677 字,大约阅读时间需要 5 分钟。

hot3.png

2013-11-17 23:57 415人阅读 (0) 收藏

category_icon.jpg 分类:

java正则

版权声明:本文为博主原创文章,未经博主允许不得转载。

理解Matcher类中的group(),group(int i),groupcount() 这三个方法的区别,需要理解捕获组的意思。捕获组也就是Pattern中用()分割的子模式。列如例题代码中的regex[2] ,  (o*)z(o*)j(o*) :

group0 :是指这个pattern串   (o*)z(o*)j(o*) ;
group1: 是指第一个子模式(o*);
group2:    是指第二个子模式(o*);
group3:    是指第三个子模式(o*);
而m.group(0) 等效于 m.group()  是指输入序列str匹配整个模式,m.group(1)是指从左往右数的第一个子模式,是指str仅与第一个子模式匹配。以此类推。而 groupcount() 这是表示当前模式中子模式的个数。

 例题: 

[java]

 

  1. import java.util.Scanner;  
  2. import java.util.regex.Matcher;  
  3. import java.util.regex.Pattern;  
  4.   
  5. public class Main{  
  6.       
  7.     /** 
  8.      * 1. zoj能AC; 
  9.      * 2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或者为空;   
  10.      * 3. 若azbjc 能AC,则azbojac也能AC,其中a,b,c为N个'o'或者为空 也就是 c / a = b ; 
  11.      * @param args 
  12.      */  
  13.     public static void main(String[] args) {  
  14.         Scanner sc = new Scanner(System.in);  
  15.           
  16.           
  17.         String regex[] = new String[]{"zoj","(o*)zoj(o*)","(o*)z(o*)j(o*)"};  
  18.           
  19.         while(sc.hasNext()){  
  20.               
  21.             String str = sc.nextLine();  
  22.             if(str.equals("zj")) {   //  开始没判断  zj  wa 了两次  
  23.                 System.out.println("Wrong Answer");  
  24.                 continue;  
  25.             }  
  26.             boolean bool = false;  
  27.             for(int i = 0; i < regex.length ; i++)  
  28.             {  
  29.                 if(i == 0 && str.matches(regex[i])){  
  30.                     bool = true;  
  31.                     break;  
  32.                 }else if(i == 1){  
  33.                     Pattern p = Pattern.compile(regex[i]);  
  34.                     Matcher m = p.matcher(str);  
  35.                     if(str.matches(regex[i] ) && m.find() && m.group(1).equals(m.group(2))){  
  36.                         bool = true;  
  37.                         break;  
  38.                     }  
  39.                 }else{  
  40.                     Pattern p = Pattern.compile(regex[i]);  
  41.                     Matcher m = p.matcher(str);  
  42.                     while(m.find() && str.matches(regex[i])){  
  43.                           
  44.                         int s1 = m.group(1).length();  
  45.                         int s2 = m.group(2).length();  
  46.                         int s3 = m.group(3).length();  
  47.                         if(s3 % s2 == 0 && ( s3 / s2 == s1)){  
  48.                             bool = true;  
  49.                             break;  
  50.                         }  
  51.                     }  
  52.                 }  
  53.             }  
  54.             if(bool){  
  55.                 System.out.println("Accepted");  
  56.             }else{  
  57.                 System.out.println("Wrong Answer");  
  58.             }  
  59.               
  60.         }  
  61.     }  
  62. }  

 

转载于:https://my.oschina.net/iioschina/blog/699924

你可能感兴趣的文章
[Usaco2005 Open]Disease Manangement 疾病管理 BZOJ1688
查看>>
极客学院职业路径图课程视频下载-爬虫
查看>>
slice,substr和substring的区别
查看>>
课堂练习(续)
查看>>
对于数据库连接池的一些思考和MyBatis的集成与使用
查看>>
[TJOI2013]最长上升子序列
查看>>
「译」当你独自开发时,你可以这么做
查看>>
Android基础夯实--重温动画(三)之初识Property Animation
查看>>
LNMP架构下的进程模型分析
查看>>
你是什么时候走上产品之路的?
查看>>
TensorFlow Lite for Android 初探(附demo)
查看>>
Android:这是一份全面 & 详细的图片加载库Glide源码分析
查看>>
ie9以下兼容html5方法
查看>>
理性分析 JavaScript 中的原型
查看>>
spring security oauth2 client_credentials模式
查看>>
Android 开发中不得不知道的 Tips 集合 (第二波)(持续更新 ing)
查看>>
Xcode9导入文件问题
查看>>
【Android视图效果】分组列表实现吸顶效果
查看>>
在ABAP里取得一个数据库表记录数的两种方法
查看>>
Spring Security OAuth 个性化token
查看>>