通过更改为char数组来查找给定字符串中的子字符串

时间:2017-05-07 08:01:08

标签: java

我正在研究以下计划。但它没有给我正确的字符串“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;

}
}

2 个答案:

答案 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'。那不是。此外,我假设您打算让程序在找到子字符串时停止运行,但它似乎不会这样做。同样,如果比较已经为假,您可能会考虑不比较子字符串的每个元素。

相关问题