2012-01-11 18 views
3

私はquotes.txtという外部ファイルを持っていますが、ファイルの内容をいくつか表示します:StringTokenizerを使用して文字列を検索したいのですが、探している文字列に区切り文字があります - Java

これは、検索のためのコードである StringTokenizer str = new StringTokenizer(line, " .'");

1 Everybody's always telling me one thing and out the other. 
2 I love criticism just so long as it's unqualified praise. 
3 The difference between 'involvement' and 'commitment' is like an eggs-and-ham 
    breakfast: the chicken was 'involved' - the pig was 'committed'. 

が、私はこれを使用し

String line = ""; 
boolean wordFound = false; 

while((line = bufRead.readLine()) != null) { 
    while(str.hasMoreTokens()) { 
     String next = str.nextToken(); 
     if(next.equalsIgnoreCase(targetWord) { 
      wordFound = true; 
      output = line; 
      break; 
     } 
    } 

    if(wordFound) break; 
    else output = "Quote not found"; 
} 

、私は文字列を検索したい"Everybody's"と行目と2行目にはがありますが、アポストロフィが区切り文字の1つであるため動作しません。私はその区切り文字を削除した場合、私はこの問題に行うことができ、適切などんなコード

ライン3に"involvement""commitment""involved""committed"を検索することはできないのだろうか?助けてくれてありがとう。

答えて

3

StringTokenizerではなく正規表現()を使用することをおすすめします。例:

final Pattern targetWordPattern = 
    Pattern.compile("\\b" + Pattern.quote(targetWord) + "\\b", 
        Pattern.CASE_INSENSITIVE); 

String line = ""; 
boolean wordFound = false; 

while((line = bufRead.readLine()) != null) { 
    if(targetWordPattern.matcher(line).find()) { 
     wordFound = true; 
     break; 
    } 
    else 
     output = "Quote not found"; 
} 
+0

ありがとうございます。しかし、これは自動的にケースを無視しますか? – user1141418

+0

@ user1141418:ようこそ。そして、 'Pattern.compile'の呼び出しで' Pattern.CASE_INSENSITIVE'フラグが見えますか?これは、大文字小文字の区別を無視するように指示します(正規表現では、大文字と小文字を区別しない一致を実行します)。 – ruakh

+0

ああ、それを見ていない。この助けてくれてありがとう! – user1141418

1

空白でトークン化し、 '文字でトリムします。

+0

トリムはどうしますか? – user1141418

関連する問題