2017-05-07 40 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'。那不是。此外,我假設你打算程序停止運行,如果它發現一個子字符串,但它似乎不會這樣做。同樣,如果比較已經錯誤,您可能會考慮不比較每個子字符串的元素。

相關問題