2016-05-08 9 views
-2

StringクラスのcharAtメソッドのみを使用して部分文字列メソッドを実装しようとしています
検索用語 'hat'に最後の文字を含めると問題が発生します。それ以外のものはすべて完璧に機能します
また、 'hat'の例を検索すると、charAt(j)トレースはすべての文字と真のオカレンスに対してインデックス0のすべての 'h'を出力します。ここ
は完全なコードです:charAtのみを使用して部分文字列チェックメソッドを実装する

public class SubString { 
    public static void main(String[] args) { 

     String line = "The cat in the hat."; 
     String item = "hat."; 

     System.out.println("'" + item + "' is substring of '" + line + "' : " + isSubString(item, line)); 

    } 

    private static boolean isSubString(String item, String line) { 
     int i = 0; 
     int j = 0; 
     int count = 0; 

     for (i = 0; i < line.length() - item.length(); i++) { 

      for (j = 0; j < item.length(); j++) { 

       if (item.charAt(j) != line.charAt(i + j)) { 
        break; 
       } 

       if (item.charAt(j) == line.charAt(i + j)) { 
        System.out.println(item.charAt(j) + ":" + j + " - " + line.charAt(i + j) + ":" + (i + j)); 
        count++; 
       } 

       if (count == item.length()) 
        return true; 

      } 

     } 
     return false; 
    } 
} 

を検索する際に再び問題が発生した「帽子」。 < ==ドットの最後の単語。
と真が、トレースリターンは間違った文字(のみ時間の比較)とインデックスは常に0

答えて

1

を試してみてください示しているが「帽子」文字列。すなわち、line.length() - item.length()

ループの条件については、以下で置き換えてください。

for (i = 0; i < line.length() - item.length() + 1; i++) {    
-1

あるあなたが最初のループはの最後の文字を省略

line.contains(item) 
+0

なぜこのOPが役立つのか説明してください。 –

関連する問題