-5

我试图检查一个字符串是否存在于一个相对较大(比如 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;
        }
    }

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

编辑:

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

4

6 回答 6

7

您可能会获得匹配并设置checktrue,但您并没有终止循环。然后下一个循环不匹配并设置checkfalse. break用语句找到循环后终止循环。

于 2013-03-13T16:48:38.873 回答
4

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

于 2013-03-13T16:48:32.097 回答
3

除非您的字符串是列表中的最后一个字符串,否则您编写该循环的方式将是错误的。您需要返回 true,或者在此处设置中断。

于 2013-03-13T16:48:41.653 回答
2

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

另外,为什么需要 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;
    }
}
于 2013-03-13T16:48:51.307 回答
1

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

于 2013-03-13T16:50:35.387 回答
1

最好将Strings 存储为 a HashSet,它使用哈希搜索,它应该更有效。

于 2013-03-13T16:51:39.870 回答