使用比较方法将多个单词与外部文件进行比较

时间:2013-01-04 09:41:34

标签: java string algorithm search if-statement

我有一个程序从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行,并且hake在第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语句中使用和/或,或者为strLine2尝试使用arrayList,但对于后者,contains方法无法将字符串与arrayList进行比较。

如果我的解释令人困惑,或者您对我如何实现目标有任何想法,请告诉我。感谢

2 个答案:

答案 0 :(得分:2)

我不确定,但我想你想找到你名单上的所有单词.. 在这一行

if(strLine1.contains(strLine2)){

你总是检查“烤”是否在实际行中,是否必须更改此行并搜索列表中的单词?

if(strLine1.contains(list)){

所以现在你得到所有的话。

答案 1 :(得分: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();

        }