Java中字符串中子串的查找共有四种方法,如下:
int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引。int indexOf(String str, int startIndex):从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引int lastIndexOf(String str) :返回在此字符串中最右边出现的指定子字符串的索引。int lastIndexOf(String str, int startIndex) :从指定的索引处开始向后搜索,返回在此字符串中最后一次出现的指定子字符串的索引
思路: ①首先可以从头开始查找(从尾部也是同样的),如果找到了需要将startIndex改变为找到处的索引。(获取找到处的索引) ②找到一次,使次数加1 ③让下一次开始检索处为 上一次找到的索引 + 需要查找的字符长度
比如:String info = “abcabab”; 现要查找ab出现的次数,那么调用indexOf(“ab”,0) 从头开始查找,找到后ab后,返回了”ab“中a的索引(即返回所查字符串中最前方的索引) 为3,因ab的长度为2,我们是不是可以将"ab"中的b排除在外,不用进行下一次检索,因为直接找到了,所以可以将下一次开始检索处设置为该字符串中的最后一个字符所在索引处。
public static void main(String[] args) throws IllegalAccessException {
//记录出现的次数
int count = 0;
Scanner scanner = new Scanner(System.in);
System.out.print("请输入原字符:");
String info = scanner.nextLine();
System.out.print("请输入需要查找的字符:(可为多个)");
String select = scanner.nextLine();
//从最前方开始检索
int start = 0;
//获取检索字符长度
int index = select.length();
while(true){
if(info.indexOf(select,start) != -1){
//找到后次数增加
count++;
//找到对应字符所在索引,当找到后,将下次寻找的位置转换到当前已找到的位置
start = info.indexOf(select,start);
//改变下次检索位置 如:yelloye 从索引0开始查找ye,找到后start = 0;则下次从索引2开始检索(即l处)
start += index; //涉及到多个字符时比 start++检索速度快
}else {
break;
}
}
System.out.println(select +"共出现了:" + count + "次");
}
|