我尝试了这段代码,但这并不适用于所有字符串。
import java.util.Scanner;
public class Substring {
public static void main(String[] args) {
String str;
String subStr;
int count=0;
Scanner in = new Scanner(System.in);
System.out.println("Enter the String : ");
str = in.nextLine();
System.out.println("Enter the Sub String : ");
subStr = in.nextLine();
for(int i =0 ; i <str.length(); i++)
{
if(str.charAt(i) == subStr.charAt(0))
{
for(int j=0 ; j<subStr.length();j++)
{
if( subStr.charAt(j) ==str.charAt(i+j))
count++;
else
{
count=0;
break;
}
}
}
}
if(count == subStr.length())
System.out.println("Sub String Matched !!");
else
System.out.println("String does not match !!");
}
}
这段代码出了什么问题?
答案 0 :(得分:0)
只有子字符串是原始字符串的末尾时,您的代码才有效。这是因为在退出第一个for
循环之前,您的代码不会检查整个子字符串是否匹配。我在if (count == subStr.length() )
循环中移动了for
语句,如果找到子字符串,则添加break
。
import java.util.Scanner;
public class Substring {
public static void main(String[] args) {
String str;
String subStr;
int count=0;
Scanner in = new Scanner(System.in);
System.out.println("Enter the String : ");
str = in.nextLine();
System.out.println("Enter the Sub String : ");
subStr = in.nextLine();
for(int i =0 ; i <str.length(); i++) {
if(str.charAt(i) == subStr.charAt(0)) {
for(int j=0 ; j<subStr.length();j++) {
if( subStr.charAt(j) ==str.charAt(i+j)) {
count++;
} else {
count=0;
break;
}
}
if(count == subStr.length()) {
System.out.println("Sub String Matched !!");
//int index = i;
break;
}
}
}
if(count == 0){
System.out.println("String does not match !!");
}
}
}
注意:如果你想要发生子串(第一个)的索引,你可以在打破循环之前设置int index = i;
,如上面的注释行所示。
另一个注意事项:不要忽略{}
和if
语句中的else
s。虽然从技术上讲,您不需要它们用于单个语句,但如果您以后需要编辑代码,则可能会导致错误...
答案 1 :(得分:0)
尝试破译代码背后的逻辑,所以简单地说,你的代码执行以下操作:
1)通过扫描仪输入一个字符串并将其存储为str,对子字符串执行相同操作并将其存储为subStr。
2)通过for循环遍历str的每个字符。
3)如果两个字符串中的相似字符数(由count变量表示)等于subString的长度,则匹配subString。否则不配。
我希望你注意到2),第一个要点你只是检查str的第一个字符是否等于subStr的第一个字符,如果它们不相等你就得出结论它们是不匹配的,这是假的。
考虑一下这个例子:
str =“baloon”
subStr =“loon”
您的输出将是:“字符串不匹配”
这是因为根据你的代码,如果'b'!='l'那么他们的匹配就没有了,这是假的。这实际上就是你的代码不起作用的原因。
您可以完成以下操作:
if(str.contains(subStr)){
System.out.println("Sub-string matched");
}