问题描述:输入两个字符串,查找字符串1中与字符串2最先匹配的内容,将匹配的字符串输出。字符串2支持通配符。通配符为“?”。已知字符串2不可能只出现?的情况。字符串1和字符串2的最大长度不超过128
代码如下:
public class FindSubStr {
public static void main(String[] args){
String allStr;
String tStr;
String subStr;
Scanner reader = new Scanner(System.in);
System.out.print("请输入总串:");
allStr = reader.nextLine();
System.out.print("请输入目标串:");
tStr = reader.nextLine();
subStr = findTargetString(allStr, tStr);
if(subStr == null){
System.out.println("没有符合条件的子串!");
}else{
System.out.println("子串存在!匹配的子串为:"+subStr);
}
}
public static String findTargetString(String allStr, String tStr){
String subStr = null;
int tLen = tStr.length();
int allLen = allStr.length();
System.out.println("allStr:"+allStr+" :"+allLen);
System.out.println("tStr:"+tStr+" :"+tLen);
for(int i=0; i < allLen;i++){
if(allLen - i < tLen){
break;
}
subStr = allStr.substring(i, i+tLen);
System.out.println("sub:"+subStr);
int j;
for(j=0;j<tLen;j++){
if(tStr.charAt(j) != '?' && (tStr.charAt(j) != subStr.charAt(j))){
break;
}
}
if(j == tLen){
return tStr;
}
}
return null;
}
}
执行结果如图,为了调试和查看方便,中间加了一些输出信息,帮助理解代码执行过程,如果觉得没必要,可以删掉。