【问题标题】:Searching for a word and then returning a number or word in the same line搜索一个单词,然后在同一行中返回一个数字或单词
【发布时间】:2013-01-03 07:38:30
【问题描述】:

我有一个程序,它接受用户输入并将每个单词存储在 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

然后我希望我的程序在每一行中搜索 tuna,然后打印出来:

Seared $1
Shredded $50

为了让我的程序执行此操作,我需要它了解单词 seared 在金枪鱼出现的第一行中,并且该行中的货币价值是 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();
    }
  }
}

我希望这更容易理解。

【问题讨论】:

  • 我认为你应该使用不区分大小写的搜索,我也会使用containsindexOf 方法而不是正则表达式:strLine1.toLowerCase().contains(list.toLowerCase())
  • 你能解释一下实际的问题是什么吗?看来您知道如何逐行读取文件并逐行搜索单词。你有什么疑问?

标签: java algorithm search


【解决方案1】:

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

【讨论】:

  • 正在考虑问题是让程序知道它来自同一行。需要先解决这个问题,然后我才能实施您的想法。谢谢
【解决方案2】:

能否更准确地说明要返回的内容、外部文件的格式以及要显示的内容?

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

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

【讨论】:

  • 我已经调整了我的问题,试图更好地解释一切。问题是文件的格式可能会有所不同,但我认为使用 str1.contains(str2) 会起作用。我会试试的,然后告诉你。谢谢
  • BufferedReader 区分行并逐行读取。请自行尝试,如果您仍有任何问题,请告诉我们。谢谢
【解决方案3】:

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

【讨论】:

  • 我已更改我的问题以使其更清楚。不幸的是,我之前已经尝试过您的选择但没有成功,因为这些行的格式都不同,唯一不变的是我在 arrayList 中的一个词在行中并且有一个价格值(请参阅调整后的问题)。认为另一个用户发布了一些可能有用的东西。谢谢
【解决方案4】:

你说过: “我需要知道的主要事情是缓冲阅读器是否区分单独的行以及我是否可以单独搜索每一行”。

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

【讨论】:

  • 谢谢,我只是想确认一下。有人发送了一些东西,我可以用它来将我的搜索与我的 arrayList 结合起来,所以当我有机会时我会尝试一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-17
  • 2013-12-18
相关资源
最近更新 更多