黑马程序员技术交流社区
标题:
【求助】计算字符串中子串出现的位置
[打印本页]
作者:
林豪
时间:
2012-6-12 19:56
标题:
【求助】计算字符串中子串出现的位置
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
计算字符串中子串出现的位置,
例:子串"kk"在字符串abkkcdkkabkkefkk中出现的次数
*/
public class Test7 {
public static void main(String[] args){
String str="abkkcdkkabkkefkkk";
String regex="(k)\\1";
int a=0;
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(str);
while(m.find())
{
a++;
System.out.println("出现的位置:"+(m.start()+1)+"~"+m.end());
}
System.out.println("出现了"+a+"次");
}
}
复制代码
最后3个KKK只能求出一个,怎样修改能求出2个呢?
作者:
潘东升
时间:
2012-6-12 20:12
到最后kkk的时候,find之后指针就指到了最后一个k的位置,所以根本不可能有两个kk的
作者:
赵兵锋
时间:
2012-6-12 20:15
public static void main(String[] args){
String str="abkkcdkkabkkefkkk";
String s = "kk";//查找的子串
int counts = 0,i=0;
while(i<str.length()){
if(str.indexOf(s,i)!=-1){
i = str.indexOf(s, i)+s.length()-1;//将i赋值为找到的字符串最后一个字符所在索引值。
System.out.println((i-1)+","+(i-2+s.length()));
counts++;
}else{
break;
}
}
System.out.println("总共是:"+counts);
}
复制代码
这样会得到你想要的结果
作者:
林豪
时间:
2012-6-12 20:58
感谢3楼,不知道还有没有其他的方法
作者:
淡然
时间:
2012-6-12 21:28
本帖最后由 淡然 于 2012-6-12 21:30 编辑
即使用boolean find(int start) 方法也不好做。只想到一种不算办法的办法:
package hcy.test.main;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
计算字符串中子串出现的位置,
例:子串"kk"在字符串abkkcdkkabkkefkk中出现的次数
*/
public class Test {
public static void main(String[] args){
String str="abkkcdkkabkkefkkk";
String regex="kk+";
String mark=null;
int a=0;
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(str);
while(m.find())
{
System.out.println("出现的位置:"+m.start()+"~"+(m.end()-1));
mark=m.group();
if((mark.length()%2)==1){//用if判断是否为奇数个K ,若是则加1.
a=a+mark.length()/2+1;
}else{
a=a+mark.length()/2;
}
}
System.out.println("出现了"+a+"次");
}
}
复制代码
输出结果为:
出现的位置:2~3
出现的位置:6~7
出现的位置:10~11
出现的位置:14~16
出现了5次
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2