java - 查找像contains这样的方法

时间:2011-10-02 10:57:25

标签: java contain

  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在我的例子中结果是一样的,但我认为这是随机的。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

我认为你的意思是这两种情况的价值应该是不同的?你表明它们是一样的。

如果要在另一个字符串中查找字符串,请使用String对象的indexOf方法。例如:

String s = "abcdef";
s.indexOf("b");

将返回1.如果该值不存在,则该方法返回-1。

因此,如果您想在大海捞针中找到一根针,则意味着检查每一行文件中是否存在另一个文件中的一条线。请记住,如果文件(及其中的行)很大,这意味着很多字符串处理,这可能很慢。你必须在两个方向都这样做。首先,在文件1中获取一行,并将其与文件2中的每一行进行比较(除非您找到匹配项,在这种情况下,您可以停止从文件1中查找该行)。然后移动到文件1中的下一行,等等。

反之,并从文件1中的文件2中查找第1行。

我不会描述所有的逻辑,但假设你知道如何打开文件和写循环,那部分不应该太难理解。