2017-05-07 61 views
-1

我正在处理以下程序。但它不给我正确的输出字符串“nameiskhan”和子字符串“名称”。 我知道这可能是一个重复的问题,但我无法在这些问题中找到所需的答案。通过更改为char数组来查找给定字符串中的子串

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

欢迎来到Stack Overflow!它看起来像你需要学习使用调试器。请帮助一些[互补调试技术](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。如果您之后仍然遇到问题,请随时返回一个[最小,完整且可验证的示例](http://stackoverflow.com/help/mcve),以说明您的问题。 –

回答

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; 
} 
+0

这个程序不适用于“你好”和“lo” – thebrightshadow

+0

@ thebrightshadow当我们有两个连续的字母相同时,这是我的逻辑错误。修复它 –

+0

这工作正常重复两次的字母。在子字符串中不止一次重复字母的情况下不起作用 – thebrightshadow

0

我建议熟悉不同的调试技术。一个非常快速和容易的是打印声明。例如,您可以打印您正在比较的值,以确保它看起来合理。它也会告诉你循环运行的次数。通过该算法,要比较的前两个字符是c [0] ='n'和d [0] ='n'。那很好。接下来的两个是c [0] ='n'和d [1] ='a'。那不是。此外,我假设你打算程序停止运行,如果它发现一个子字符串,但它似乎不会这样做。同样,如果比较已经错误,您可能会考虑不比较每个子字符串的元素。

相关问题