A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 林豪 中级黑马   /  2012-6-12 19:56  /  1452 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.regex.Matcher;
  2. import java.util.regex.Pattern;

  3. /*
  4. 计算字符串中子串出现的位置,
  5. 例:子串"kk"在字符串abkkcdkkabkkefkk中出现的次数
  6. */
  7. public class Test7 {
  8. public static void main(String[] args){
  9.           String str="abkkcdkkabkkefkkk";
  10.           String regex="(k)\\1";
  11.           int a=0;
  12.           Pattern p=Pattern.compile(regex);
  13.           Matcher m=p.matcher(str);
  14.           while(m.find())
  15.           {
  16.            a++;
  17.            System.out.println("出现的位置:"+(m.start()+1)+"~"+m.end());
  18.           }
  19.           System.out.println("出现了"+a+"次");
  20.          }
  21. }
复制代码
最后3个KKK只能求出一个,怎样修改能求出2个呢?

4 个回复

倒序浏览
到最后kkk的时候,find之后指针就指到了最后一个k的位置,所以根本不可能有两个kk的

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 恭喜啊~~~

查看全部评分

回复 使用道具 举报
  1.          public static void main(String[] args){
  2.          String str="abkkcdkkabkkefkkk";
  3.          String s = "kk";//查找的子串
  4.          int counts = 0,i=0;
  5.          while(i<str.length()){
  6.                  if(str.indexOf(s,i)!=-1){
  7.                          i = str.indexOf(s, i)+s.length()-1;//将i赋值为找到的字符串最后一个字符所在索引值。
  8.                          System.out.println((i-1)+","+(i-2+s.length()));
  9.                          counts++;
  10.                  }else{
  11.                          break;
  12.                  }
  13.          }
  14.          System.out.println("总共是:"+counts);
  15.          }
复制代码
这样会得到你想要的结果
回复 使用道具 举报
感谢3楼,不知道还有没有其他的方法
回复 使用道具 举报
本帖最后由 淡然 于 2012-6-12 21:30 编辑

即使用boolean find(int start)  方法也不好做。只想到一种不算办法的办法:
  1. package hcy.test.main;

  2. import java.util.regex.Matcher;
  3. import java.util.regex.Pattern;

  4. /*
  5. 计算字符串中子串出现的位置,
  6. 例:子串"kk"在字符串abkkcdkkabkkefkk中出现的次数
  7. */
  8. public class Test {
  9. public static void main(String[] args){
  10.           String str="abkkcdkkabkkefkkk";
  11.           String regex="kk+";
  12.           String mark=null;
  13.           int a=0;
  14.           Pattern p=Pattern.compile(regex);
  15.           Matcher m=p.matcher(str);
  16.          
  17.          
  18.           while(m.find())
  19.           {
  20.            System.out.println("出现的位置:"+m.start()+"~"+(m.end()-1));
  21.            
  22.            mark=m.group();
  23.            if((mark.length()%2)==1){//用if判断是否为奇数个K ,若是则加1.
  24.                    a=a+mark.length()/2+1;
  25.            }else{
  26.                    a=a+mark.length()/2;
  27.            }
  28.           }
  29.           System.out.println("出现了"+a+"次");
  30.          }
  31. }
复制代码
输出结果为:
出现的位置:2~3
出现的位置:6~7
出现的位置:10~11
出现的位置:14~16
出现了5次
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马