2016-11-06 11 views
-1

文字列内の単語または句を検索するfindText()メソッドを作成しようとしています。Java。単語または句の検索方法エラー:文字列のインデックスが範囲外です

static String usrStr = "There was was once a boy named Timmy. Timmy liked to play in the park."; 

public static void findText() { 
    int matchCntr = 0; 
    int numInstances = 0; 
    String phrase = ""; 

    System.out.println("Enter a word or phrase to be found: "); 
    phrase = scnr.nextLine(); 

    for (int i = 0; i < usrStr.length(); i++) { 
    if (usrStr.charAt(i) == phrase.charAt(matchCntr)) { //FIX ME 
     matchCntr++; 
     if (matchCntr == phrase.length()) { 
      numInstances++; 
      matchCntr = 0; 
     } 
    } 
    else { 
     matchCntr = 0; 
    } 
    } 

    System.out.println("\"" + phrase + "\" instances: " + numInstances); 

    return; 

それが正しく働いていた場合、私はこのouputを取得する必要があります。

Enter a word or phrase to be entered: <Timmy> 
"Timmy" instances: 2 

をしかし、私はこのコードを実行するとき、私はこのエラーを取得します。コードの本体でエラーが発生した場所を// FIX MEでマークしました。

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: 
String index out of range: 0 

私は、文字列「というフレーズは、」少なくとも38文字ではありませんが、それでも私は、コードを修正する助けにはならないことをするので、このエラーはおそらくであることを読みました。 StringIndexOutOfBoundsExceptionエラーを回避しながら、意図したとおりに動作するようにこのコードを修正する方法はありますか?

+0

実行中にエラーは発生しませんでした。 for(i = 0; i iNan

+0

これは大きなプログラムの一部ですが、私は初期化を含めるのを忘れていましたが、メソッドの前に静的intとして初期化されているはずです。ありがとう! –

+0

私はこれを仮想マシンで実行しようとしているのですか? –

答えて

0

バッファ付きリーダーを使用し、iを初期化しなければなりませんでした。あなたのためにこれを行う機能があります。

String usrStr = "There was was once a boy named Timmy. Timmy liked to play in the park."; 
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 

int matchCntr = 0; 
int numInstances = 0; 
String phrase = ""; 
System.out.println("Enter a word or phrase to be found: "); 
phrase = br.readLine(); 

for (int i = 0; i < usrStr.length(); i++) 
{ 
    if (usrStr.charAt(i) == phrase.charAt(matchCntr)) 
    { //FIX ME 
    matchCntr++; 
    if (matchCntr == phrase.length()) 
    { 
     numInstances++; 
     matchCntr = 0; 
    } 
    } 
    else 
    { 
    matchCntr = 0; 
    } 
} 
System.out.println("\"" + phrase.toString() + "\" instances: " + numInstances); 
+0

ScannerクラスとBufferedReaderの違いは何ですか? –

+0

正直、私はあなたに良い答えを与えることができませんでした。私は過去にスキャナを使用する際に問題があり、バッファリングされたリーダーが私にとってうまくいくように見えました。このリンクをチェックしてください...それは違いのより良い説明を与えるべきです。 [Scanner vs. BufferedReader](http://stackoverflow.com/questions/2231369/scanner-vs-bufferedreader) – JohnG

関連する問題