Java - ищет метод, как содержит - PullRequest
0 голосов
/ 02 октября 2011
  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, а игла приходит из файла2, я хочу, чтобы результат был равен 2, потому что слово beers частично или совпадает только с двумя строками стога сена.(пиво ---> я люблю пиво и пиво) - ничего не происходит с ним я люблю stackoverflow) НО, когда стог сена приходит из файла2, а игла приходит из файла1, я хочу, чтобы результат был равен 2. (я люблю пиво, которое не является частью или то же самое сЧто-нибудь из файла 2, я люблю путешествовать так же, stackoverflow - это часть, я люблю stackoverflow -1- и, наконец, пиво - то же самое, что и пиво -2-) Какой метод для этого правильный?Как я уже говорил ранее, параметр «содержит» дает мне один и тот же результат, независимо от того, какой файл является стогом сена, или строки иголки.

PS В моем примере результат такой же, но я думаю, что это случайный случай.

как я могу это сделать?

1 Ответ

1 голос
/ 02 октября 2011

Я думаю, что вы имели в виду, что значения, вероятно, должны быть разными для двух случаев? Вы показываете, что они одинаковы.

Если вы хотите найти строку в другой строке, используйте метод indexOf объекта String. Например:

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

вернет 1. Если значение отсутствует, метод возвращает -1.

То есть, если вы хотите найти иголку в стоге сена, это означает, что каждая строка одного файла проверяется на наличие строки в другом файле. Имейте в виду, что если файлы (и строки в них) большие, это означает, что обработка строк требует много времени, что может быть медленным. И вам придется сделать это в обоих направлениях. Сначала найдите строку в файле 1 и сравните ее с каждой строкой в ​​файле 2 (если только вы не найдете совпадение, в этом случае вы можете прекратить поиск строки из файла 1). Затем перейдите к следующей строке в файле 1 и т. Д.

Обратное, и найдите строку 1 из файла 2 в файле 1.

Я не буду описывать всю логику, но эту часть не должно быть слишком сложно понять, если вы знаете, как открывать файлы и записывать циклы.

...