-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 回答