【问题标题】:Java Checking .equals on a large list of StringsJava 检查大量字符串上的 .equals
【发布时间】:2013-03-01 17:58:21
【问题描述】:

我正在尝试检查一个字符串是否存在于一个相对较大(比如 8000 个项目)的字符串列表中。

这就是我所做的:

    for ( int i = 0; i < listOfStrings.size(); i++){
        String trim = listOfStrings.get(i).getString().trim();
        if (trim.equals(testString)){
            check = true;
            break;
        } else {
            check = false;
        }
    }

但尽管我确定字符串在列表中,但我得到了错误的返回。对于大型列表,这是一种错误的方法吗?

编辑:

抱歉,代码在没有上下文的情况下被截断。是的,休息;不见了。

【问题讨论】:

  • 哇,getString() 调用的目的是什么?
  • 您是否考虑过使用一组字符串,例如 HashSet?这将允许以更多内存为代价进行更快的搜索。
  • getString() 是数据模型中 getX 的占位符。我会研究 HashSets thx

标签: java string list


【解决方案1】:

您可能会得到一个匹配项并将check 设置为true,但您并没有终止循环。然后下一个循环不匹配并将check 设置为false。找到循环后,使用break 语句终止循环。

【讨论】:

  • 更不用说您正在使用 trim() ,这会导致比较未正确完成。假设您正在包含“Bye World”和“Hello World”的列表中查找“Hello World”:它们将被检查为“ByeWorld”和“HelloWorld”,因此您会得到一个错误的不匹配,不是由您分配“检查”而不返回的不当方式引起的,而是通过使用 trim()。
  • 我不知道listOfStrings的实际类型是什么,可能是List&lt;Foo&gt;。也许这就是为什么getString() 被调用的原因。也许需要 OP 致电trim。我所知道的是,以某种方式,OP 得到了修剪 String 并且需要确定这是否是找到匹配项的循环。此外,trim() 不会消除字符串中间的空格,只会消除开头和结尾的空格。
  • 是的,很抱歉代码被剪断了。它是一个带有数据模型的列表,并且必须修剪字符串。通常他们没有空格
  • @JorgeAntonioDíaz-Benito 这不正确。 “Hello World”.trim() 返回“Hello World”。它只修剪前导和尾随空格,不会删除内部空格。
【解决方案2】:

您需要在找到匹配项后返回。否则下一个不匹配将重置 check = false。

【讨论】:

    【解决方案3】:

    您编写该循环的方式,检查将是错误的,除非您的字符串是列表中的 last 字符串。你需要返回true,或者在里面放一个break。

    【讨论】:

      【解决方案4】:

      除非列表中的最后一个字符串是匹配项,否则这将始终返回 false,因为一旦遇到不匹配项,check 的值将被设置为 false(替换任何真实值)。发现匹配值后使用break

      另外,为什么需要 getString() 调用?如果列表全是字符串,那不是必须的吗?

      我认为这是一个适当的解决方法(假设您有充分的理由在比较之前修剪每个字符串):

      for ( int i = 0; i < listOfStrings.size(); i++){
          String trim = listOfStrings.get(i).trim();
          if (trim.equals(testString)){
              check = true;
              break;
          } else {
              check = false;
          }
      }
      

      【讨论】:

        【解决方案5】:

        我认为你得到了错误的返回,因为你在找到字符串时没有打破 for 循环。

        【讨论】:

          【解决方案6】:

          最好将Strings 存储为HashSet,这样使用哈希搜索,应该会更高效。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-01-11
            • 1970-01-01
            • 2014-11-03
            • 1970-01-01
            • 2014-11-06
            • 2016-01-14
            • 2015-09-22
            • 1970-01-01
            相关资源
            最近更新 更多