搜索单词然后返回同一行中的数字或单词

时间:2013-01-03 07:38:30

标签: java algorithm search

我有一个程序,它接受用户输入并将每个单词存储在arrayList中,然后搜索外部文件中的每个单词。我想从这里做的是返回另一个单词(在另一个arrayList中)或价格值与第一个搜索单词的行相同。

例如:

Here is my user input: Tuna

Here are my associated words in another arrayList: (seared, chunky, shredded)

Here are lines in my file: the cost of seared tuna is $1 per tin. Contains brine.
                           the cost of shredded tuna is $50 per packet

然后我希望我的程序在每行搜索金枪鱼然后打印出来:

Seared $1
Shredded $50

对于我的程序来说,我需要了解这个词出现在金枪鱼出现的第一行,而且这行中的货币值是1美元。然后重复下一行的过程。

我需要知道的主要事情是,如果缓冲读取器区分不同的行,并且我可以单独搜索每行以查找arrayList中的单词和货币值。

我用于搜索的代码如下。到目前为止,它只搜索文件中的单词,然后返回该单词的位置。

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

    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());
      start = m.end();
    }
  }
}

我希望这更容易理解。

4 个答案:

答案 0 :(得分:2)

我认为如果您想搜索行中的价格,可以查找“$”符号,然后提取数字。

答案 1 :(得分:1)

您能更精确地了解您想要返回的内容,外部文件的格式以及您想要显示的内容吗?

关于你的代码 您可以在String类中使用str1.contains(str2)方法来检查用户输入的单词是否在行中而不是使用matcher,因为这里没有正则表达式。

如果用户输入多个单词,那么您可以为此循环。

答案 2 :(得分:1)

你似乎知道如何读取行以及如何遍历它们,这很好。现在您需要做的就是检查每一行是否包含单词“tuna”,如果它确实将“tuna”字符串替换为“”,那么您的Seared $ 1或者Shredded $ 50。​​

答案 3 :(得分:1)

你说过: “我需要知道的主要事情是,如果缓冲读取器区分不同的行,并且我可以单独搜索每一行”。

但readLine()确实读取了由换行符(\ n)划分的单独行。所以你可以单独处理这些行。对不起,如果我不明白你的问题...