static boolean contains(Iterable<String> haystack, String needle) {
for (String s : haystack) {
if (s.contains(needle)) {
return true;
}
}
return false;
}
static void containsAll() throws IOException {
List<String> words = loadLines("opacial.txt");
List<String> tocheck = loadLines("queries0.txt");
System.out.println(words.size());
System.out.println(tocheck.size());
int index2 = 0;
for (String s : tocheck) {
if (contains(words, s)) {
index2++;
//return false;
}
}
System.out.println(index2);
//return true;
}
我正在寻找一个像contains(上面的代码)这样做的方法: 它将检查大海捞针是否存在,或者针是否是大海捞针中的一部分。 在那种情况下(上面的代码),如果我反转到haystack的文件,以及给针的文件,结果是相同的。但我不想那样。例如:
File 1:
i love beers
i like travelling
stackoverflow
beers
And File2 :
beers
i love stackoverflow
然后如果haystack来自文件1并且针来自file2,我希望结果为2,因为单词啤酒是部分或相同的,只有两个干草堆串。 (啤酒---&gt;我喜欢啤酒和啤酒) - 我喜欢stackoverflow没有任何反应) 但是当干草堆来自file2并且针来自file1时,我希望结果为2.(我喜欢啤酒不是文件2的任何部分或相同,我喜欢旅行相同,stackoverflow是我爱的一部分stackoverflow -1 - 最后啤酒与啤酒相同-2-) 什么是正确的方法? 正如我之前所说,无论什么文件是干草堆或给针的字符串,包含给我相同的结果。
PS在我的例子中结果是一样的,但我认为这是随机的。
我该怎么做?
答案 0 :(得分:1)
我认为你的意思是这两种情况的价值应该是不同的?你表明它们是一样的。
如果要在另一个字符串中查找字符串,请使用String对象的indexOf方法。例如:
String s = "abcdef";
s.indexOf("b");
将返回1.如果该值不存在,则该方法返回-1。
因此,如果您想在大海捞针中找到一根针,则意味着检查每一行文件中是否存在另一个文件中的一条线。请记住,如果文件(及其中的行)很大,这意味着很多字符串处理,这可能很慢。你必须在两个方向都这样做。首先,在文件1中获取一行,并将其与文件2中的每一行进行比较(除非您找到匹配项,在这种情况下,您可以停止从文件1中查找该行)。然后移动到文件1中的下一行,等等。
反之,并从文件1中的文件2中查找第1行。
我不会描述所有的逻辑,但假设你知道如何打开文件和写循环,那部分不应该太难理解。