黑马程序员技术交流社区

标题: 【求助】计算字符串中子串出现的位置 [打印本页]

作者: 林豪    时间: 2012-6-12 19:56
标题: 【求助】计算字符串中子串出现的位置
  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个呢?
作者: 潘东升    时间: 2012-6-12 20:12
到最后kkk的时候,find之后指针就指到了最后一个k的位置,所以根本不可能有两个kk的
作者: 赵兵锋    时间: 2012-6-12 20:15
  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.          }
复制代码
这样会得到你想要的结果
作者: 林豪    时间: 2012-6-12 20:58
感谢3楼,不知道还有没有其他的方法
作者: 淡然    时间: 2012-6-12 21:28
本帖最后由 淡然 于 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次





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2