-1

1 つのファイルから入力を取得し、そのファイルの各単語を arrayList のアイテムとして保存し、別のファイルで各単語を検索するプログラムがあります。そこから、別の文字列の単語が検索された単語と同じ行にあるかどうかを確認する必要があります。ロジックは少しややこしいので、例を示します。

これは、最初のファイルからの入力です。

Tuna, Salmon, Hake.

次に、各項目を arrayList に保存します。

{Tuna,Salmon,Hake}

そこから、次のデータを含むファイルを検索します。

It costs $5 for tuna that is seared and chunky.
We are out of stock on hake.
It costs $6 for sardines that are tinned.
It costs $4 for tuna that is seared.

次に、プログラムは上記のファイルを検索し、マグロが 1 行目と 4 行目にあり、メルルーサが 2 行目にあり、サーモンが表示されないことを確認します。

ここから、たとえば単語のリストが必要です。

Seared, chunky, out of stock.

そして、このリストを比較して、それらが他の単語と同じ行にあるかどうかを確認して、出力します。

Tuna is seared and chunky
Hake is out of stock
Tuna is seared

これまでのところ、完全に機能するコードがありますが、1 単語でしか機能しません。私のコードの例は次のとおりです。

while((strLine1 = br1.readLine()) != null){
            for(String list: listOfWords){
            Pattern p = Pattern.compile(list);
            Matcher m = p.matcher(strLine1);

    String strLine2 = "seared" ;      

        int start = 0;
        while (m.find(start)) {
            System.out.printf("Word found: %s at index %d to %d.%n", m.group(), m.start(), m.end());
            if(strLine1.contains(strLine2)){
               System.out.println(list + " is " + strLine2);
                        }
            start = m.end();
                }    
            }
          }

したがって、このコードが出力するものは次のとおりです。

Tuna is seared (referring to line 1)
Tuna is seared (referring to line 4)

これを実現するには、if ステートメントでand またはを使用するか、strLine2 の arrayList を試すことができると思いますが、後者の場合、contains メソッドは文字列を arrayList と比較できません。

私の説明がわかりにくい場合や、目標を達成する方法について何かアイデアがあれば教えてください。ありがとう

4

2 に答える 2

2

よくわかりませんが、リストにあるすべての単語を見つけたいと思いました..そしてこの行で

if(strLine1.contains(strLine2)){

「たたき」が実際の行にあるかどうかを常に確認します。この行を変更して、リストの単語を検索する必要がありますか?

if(strLine1.contains(list)){

だから今、あなたはすべての言葉を理解しています。

于 2013-01-04T09:54:36.053 に答える
1

arrayList と高度な for ループで動作するようになりました。

String[] strLine2 = {"seared","chunky","out of stock"} ;      

        int start = 0;
        while (m.find(start)) {
            System.out.printf("Word found: %s at index %d to %d.%n", m.group(), m.start(), m.end());
            for(String lineWords: strLine2){
            if(strLine1.contains(lineWords)){
               System.out.println(list + " is " + lineWords);
                        }
            }
            start = m.end();

        }
于 2013-01-04T10:08:25.937 に答える