在一个大的字符串列表上检查Java.equals
我试图检查一个相对较大(比如8000个项目)的字符串列表中是否存在一个字符串 我就是这么做的:在一个大的字符串列表上检查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;
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;
}
}