我正在研究以下计划。但它没有给我正确的字符串“nameiskhan”和子串作为“名称”的输出。 我知道这可能是一个重复的问题,但我无法在这些问题中找到理想的答案。
import java.util.*;
import java.lang.String;
public class CheckingSubstring2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Please enter a String: ");
String string1 = input.next();
System.out.println("Please enter a second String: ");
String substring = input.next();
if (isSubstring(string1, substring)) {
System.out.println("The second string is a substring of the first.");
} else {
System.out.println("The second string is NOT a substring of the first.");
}
}
public static boolean isSubstring(String string1, String substring) {
char c[]=string1.toCharArray();
char d[]=substring.toCharArray();
boolean match = true;
for (int i = 0; i < c.length; i++) {
for (int j = 0; j < d.length; j++) {
if (c[i] == d[j]) {
match = true;
} else {
match = false;
}
}
}
return match;
}
}
答案 0 :(得分:1)
如果你想在没有contains
的情况下这样做,那怎么样?
我在这里做的是通过原始字符串一次通过并检查substring
是否可以在主String
中找到连续字符。
public static boolean isSubstring(String string1, String substring) {
char c[]=string1.toCharArray();
char d[]=substring.toCharArray();
for (int i = 0; i < c.length; i++) {
if(c[i] == d[0]){
boolean match = false;
for(int j = 0; j < d.length; j++){
if(c[i+j] != d[j]){
match = false;
break;
} else{
match = true;
}
}
if(match) return true;
}
}
return false;
}
答案 1 :(得分:0)
我建议熟悉不同的调试技巧。一个非常快速和简单的是一个打印声明。例如,您可以打印要比较的值,以确保它看起来合理。它还可以指示循环运行的次数。单步执行算法,要比较的前两个字符是c [0] ='n'和d [0] ='n'。非常好。接下来的两个是c [0] ='n'和d [1] ='a'。那不是。此外,我假设您打算让程序在找到子字符串时停止运行,但它似乎不会这样做。同样,如果比较已经为假,您可能会考虑不比较子字符串的每个元素。