Pattern.CASE_INSENSITIVE - PullRequest
       1

Pattern.CASE_INSENSITIVE

0 голосов
/ 22 ноября 2018

Я работаю над методом, который принимает параметр аргумента String, ищет файл в этом слове и возвращает количество вхождений этого слова.Я использую Java Regex Pattern и Matcher классы и методы.То, как я реализовал Pattern.CASE_INSENSITIVE, похоже, не работает правильно.Он по-прежнему совпадает с учетом регистра.

public int lookup(String wrd) throws IOException, FileNotFoundException, 
{  
    int cnt = 0;     

BufferedReader in = new BufferedReader(new FileReader(this.filename));

    String line = in.readLine();
    while (line != null)
    { 
        Pattern ptn = Pattern.compile(wrd, Pattern.CASE_INSENSITIVE);
        Matcher mtch = ptn.mtch(line);
        if (mtch.find()) {cnt++;}
        line = input.readLine();
    }
    return cnt;
}

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Так же, как я уже упоминал в комментарии, исправьте ошибки.Вот немного измененная и исправленная версия вашего кода.Таким образом, кажется, что все работает:

  public static int lookup(String wrd) throws IOException {
    int cnt = 0;

    BufferedReader in = new BufferedReader(
        new StringReader(new String("word adfasdword avcasf\n asdf WoRd asdfWORDasdf")));

    String line = in.readLine();
    while (line != null) {
      Pattern ptn = Pattern.compile(wrd, Pattern.CASE_INSENSITIVE);
      Matcher mtch = ptn.matcher(line);
      while (mtch.find()) {
        cnt++;
      }
      line = in.readLine();
    }
    return cnt;
  }

  public static void main(String[] args) throws IOException {
    System.out.println(lookup("WORD"));
    System.out.println(lookup("word"));
    System.out.println(lookup("WorD"));
    System.out.println(lookup("worLd"));
  }

Вывод:

4
4
4
0
0 голосов
/ 22 ноября 2018

Вы не прокручиваете строки в файле и читаете только первую строку.Нет смысла использовать регулярные выражения, для большинства языков вы можете комбинировать toLowerCase() с indexOf() для проверки позиции без учета регистра.

public static void main(String[] args) throws Exception {
  Path p = ...
  String wrd = ...
  System.out.println(totalMatches(p, wrd));
}

private static int totalMatches(Path path, String word) throws IOException {
  try (BufferedReader reader = Files.newBufferedReader(path)) {
    return reader.lines()
        .mapToInt(l -> lineMatches(l, word))
        .sum();
  }
}

private static int lineMatches(String line, String word) {
  int counter = 0, i = 0, found;
  while ((found = line.toLowerCase().indexOf(word.toLowerCase(), i)) >= 0) {
    counter++;
    i = found + 1;
  }
  return counter;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...