Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在一个大的字符串列表上检查Java.equals_Java_String_List - Fatal编程技术网

在一个大的字符串列表上检查Java.equals

在一个大的字符串列表上检查Java.equals,java,string,list,Java,String,List,我试图检查一个相对较大(比如8000个项目)的字符串列表中是否存在一个字符串 我就是这么做的: for ( int i = 0; i < listOfStrings.size(); i++){ String trim = listOfStrings.get(i).getString().trim(); if (trim.equals(testString)){ check = true; break;

我试图检查一个相对较大(比如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;
        }
    }
for(int i=0;i
但是,虽然我确信字符串在列表中,但我得到了一个错误的返回。对于大型列表,这是一种错误的方法吗

编辑:


很抱歉,代码没有上下文。是的,休息一下;缺少。找到匹配项后需要返回。否则,下一个不匹配项将重置check=false。

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

按照编写循环的方式,除非您的字符串是列表中最后一个字符串,否则check将为false。您需要返回true,或者在其中加一个分隔符。

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

另外,为什么需要getString()调用?如果列表中充满了字符串,那不是很有必要吗

我认为这是一个合适的解决方案(假设您在比较之前有很好的理由修剪每条字符串):

for(int i=0;i
我认为您得到了错误的返回,因为您在找到字符串时没有中断for循环。

最好将
字符串
存储为一个
哈希集
,它使用哈希搜索,应该更有效。

哇,getString()调用是为了什么?您是否考虑过使用一组字符串,例如HashSet?这将允许以更多内存为代价进行更快的搜索。getString()是datamodel中getX的占位符。我将研究hashset thxx,更不用说您正在使用trim(),这会导致比较没有正确完成。假设您正在一个包含“再见世界”和“你好世界”的列表中查找“你好世界”:它们将被检查为“ByeWorld”和“HelloWorld”,因此您将得到一个虚假的不匹配,这不是因为您在不返回的情况下分配“check”的不恰当方式引起的,而是使用trim().我不知道
listofstring
的实际类型是什么,它可能是
List
。也许这就是调用
getString()
的原因。可能OP需要调用
trim
。我所知道的是,OP以某种方式得到了一个修剪过的
字符串
,需要确定这是否是找到匹配项的循环。另外,<代码> Times()/代码>不会消除字符串中间的空白,只有在开始和结束时。是的,抱歉代码被剪断。这是一个带有数据模型的列表,字符串必须被修剪。他们通常没有whitespaces@JorgeAntonioD这是不对的。trim()返回“Hello World”。它只修剪前导和尾随空格,不删除内部空格。
for ( int i = 0; i < listOfStrings.size(); i++){
    String trim = listOfStrings.get(i).trim();
    if (trim.equals(testString)){
        check = true;
        break;
    } else {
        check = false;
    }
}