java—看起来像contains这样的方法

java—看起来像contains这样的方法,java,contain,Java,Contain,如果haystack来自文件1,而Pineder来自文件2,我希望结果是2,因为单词beers是两个haystack字符串的一部分或相同部分。(啤酒-->我爱啤酒和啤酒)-我爱啤酒,什么事都不会发生) 但当草堆来自文件2,针来自文件1时,我希望结果是2。(我爱啤酒与文件2中的任何东西都不一样,我也喜欢旅行,stackoverflow是我爱stackoverflow-1-的一部分,最后,啤酒与啤酒-2-是一样的。) 正确的方法是什么? 正如我之前所说的,无论是haystack文件还是针的字符串,c

如果haystack来自文件1,而Pineder来自文件2,我希望结果是2,因为单词beers是两个haystack字符串的一部分或相同部分。(啤酒-->我爱啤酒和啤酒)-我爱啤酒,什么事都不会发生) 但当草堆来自文件2,针来自文件1时,我希望结果是2。(我爱啤酒与文件2中的任何东西都不一样,我也喜欢旅行,stackoverflow是我爱stackoverflow-1-的一部分,最后,啤酒与啤酒-2-是一样的。) 正确的方法是什么? 正如我之前所说的,无论是haystack文件还是针的字符串,contains都会给我相同的结果

在我的例子中,结果是一样的,但我认为这是随机的


我该怎么做呢?

我想你的意思是这两种情况下的值应该不同?你显示他们是一样的

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

  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;
  }
File 1: 
i love beers
i like travelling
stackoverflow
beers

And File2 :    
beers
i love stackoverflow
将返回1。如果该值不存在,则该方法返回-1

因此,如果你想大海捞针,那就意味着检查一个文件中的每一行,看另一个文件中是否存在一行。请记住,如果文件(以及其中的行)很大,这意味着需要大量的字符串处理,这可能会很慢。你必须在两个方向上做。首先,在文件1中获取一行,并将其与文件2中的每一行进行比较(除非找到匹配项,否则可以停止查找文件1中的行)。然后移到文件1中的下一行,以此类推

相反,在文件1的文件2中查找第1行


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

两种情况下的结果如何相同?若文件1是草堆,那个么结果有一行,若文件2是草堆,那个么结果有两行。这是作业吗?如果没有,用例是什么?看起来您的contains函数周围有一些代码。结果不是你想要的。您需要弄清楚“contains”函数是否做了您想要做的事情,或者它周围的代码是错误的。一个很好的方法是为“contains”函数编写单元测试。你能发布代码说明你是如何构建haystack(Iterable haystack)的吗?我怀疑它是一个单个单词的集合,而不是短语。用例就是我最后说的。。我想做我上面写的比较。如果file1是haystack,我将有2行,单词将用我没有写的其他方法改变。。但没关系,别看我的代码。。正如我在下面写的,关于我想要的比较
String s = "abcdef";
s.indexOf("b");