java中String类有个IndexOf方法,即判断一String对象是否包含在另一个String中。
其核心即是在一个大数组里找一个小数组,有点像c里面的strcmp。
方法如下:
先找到源String中是否有和目标String(被判断包含的String)第一个字符相同的字符,从源的第一个字符开始,如果没找到,则判断源的后一个字符是否和目标第一个字符相同(相当于下标+1),以此循环,直到找到相同。判断的条件是下标偏移 < 源的长度减去目标的长度,原因很好理解。
如果找到了和目标第一个字符相同的字符,判断目标字符后一个和源字符后一个是否相同,不同直接return false,相同则继续循环判断下一个字符是否相同,判断的条件是在目标字符长度范围内。
代码如下:
import java.util.Scanner;
public class HelloWord {
public boolean IndexOf(String s1, String s2){
int sourceNum = s1.length();
int targetNum = s2.length();
int max = sourceNum - targetNum;
char first = s2.charAt(0);
for(int i = 0; i < max; i++){
if(s1.charAt(i) != first){
while(++i <= max && s1.charAt(i) == first);
}
if(i <= max){
int start = i + 1;
int end = start + targetNum - 1;
for(int k = 1;start < end && s1.charAt(start) == s2.charAt(k); k++,start++);
if(start == end ){
return true;
}
}
}return false;
}
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
String s1 = scanner.nextLine();
String s2 = scanner.nextLine();
System.out.println(s1 + " " + s2);
HelloWord hw = new HelloWord();
boolean bl = hw.IndexOf(s1, s2);
System.out.println(bl);
}
}