算法练习之从String.indexOf的模拟实现开始
String.indexOf的模拟实现,没想象中有多么高深的查找算法,就是最普通的遍历查找
思路:先找到第一个相同的字符,然后依次比较后面的字符,若都相等则表示查找成功
/**
*查找字符串pattern在str中第一次出现的位置
*@paramstr
*@parampattern
*@return
*/
publicintfirstIndexOf(Stringstr,Stringpattern){
for(inti=0;i<(str.length()-pattern.length());i++){
intj=0;
while(j<pattern.length()){
if(str.charAt(i+j)!=pattern.charAt(j))break;
j++;
}
if(j==pattern.length())returni;
}
return-1;
}
/**
*查找字符串pattern在str中最后一次出现的位置
*@paramstr
*@parampattern
*@return
*/
publicintlastIndexOf(Stringstr,Stringpattern){
for(inti=str.length()-pattern.length();i>=0;i--){
intj=0;
while(j<pattern.length()){
if(str.charAt(i+j)!=pattern.charAt(j))break;
j++;
}
if(j==pattern.length())returni;
}
return-1;
}
/**
*查找字符串pattern在str中出现的位置
*@paramstr
*@parampattern
*@return
*/
publicList<Integer>indexOf(Stringstr,Stringpattern){
List<Integer>indexs=newArrayList<Integer>();
for(inti=0;i<(str.length()-pattern.length());i++){
intj=0;
while(j<pattern.length()){
if(str.charAt(i+j)!=pattern.charAt(j))break;
j++;
}
if(j==pattern.length())indexs.add(i);
}
returnindexs;
}
同样更常用的String.contains方法实际上就是调用的String.indexOf实现
/**
*判断字符串pattern在str中是否存在
*@paramstr
*@parampattern
*@return
*/
publicbooleancontains(Stringstr,Stringpattern){
returnfirstIndexOf(str,pattern)!=-1;
}热门推荐
10 祝孙辈生日祝福语简短
11 恋人跨年祝福语大全简短
12 考大学敬酒简短祝福语
13 开工投产大吉祝福语 简短
14 偶然结婚祝福语朋友简短
15 感谢学长学姐祝福语简短
16 戏精的祝福语简短
17 我要结婚祝福语简短
18 婚前女儿生日祝福语简短