2016-01-08 3 views
0

У меня есть задание в Java, где я должен использовать Бойер Мур поиска подстроки решение Седжвик: http://algs4.cs.princeton.edu/53substring/BoyerMoore.java.htmlБойер-Моор счетные слова ява

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

public String search(String txt) { 
     int M = pat.length(); 
     int N = txt.length(); 
     int count = 0; 
     int skip = 0; 
     int charCount = 0; 
     for (int i = 0; i <= N - M; i += skip) { 
      skip = 0; 
      for (int j = M-1; j >= 0; j--) { 
       if (pat.charAt(j) != txt.charAt(i+j)) { 
        skip = Math.max(1, j - right[txt.charAt(i+j)]); 
        break; 
       } 
       charCount++; 
      } 
      if (skip == 0) 
      { 
       count++; 
       skip++; 
      } 
     } 
     return "Aantal char: " + charCount + "\n" + count;      
    } 

я изменил, если пропустить заявление, чтобы запустить счетчик «счетчик» и вернуть его в конце. Что происходит, если я кормлю его рисунок и текст вручную, кажется, считать штраф так:

картина: тест текст: «этот тест тест тест testtest» результат: 5

Однако Мне нужно прочитать в текстовом файле некоторого текста около 70k слов и поиск подстрок, что:

 BufferedReader input = new BufferedReader(new FileReader(System.getProperty("user.home") + "/Desktop/opdr3tekst.txt")); 
     StringBuilder stringBuilder = new StringBuilder(); 

     while(input.readLine() != null) 
     { 
      stringBuilder.append(input.readLine()); 
     } 
     input.close(); 

     BoyerMoore boyer = new BoyerMoore("pattern to search"); 


     System.out.println(boyer.search(stringBuilder.toString())); 

Так что, когда я искать слово, которое я всегда получить номер тот намного меньше, чем когда я CMD + F файл сам в текстовом редакторе. Любая идея, что происходит не так?

ответ

1

Вы пропускаете строки из файла при чтении. Это из-за этого while(input.readLine() != null). Линия чтения при выполнении этого оператора никогда не добавляется к StringBuilder

Чтобы исправить это, вы можете сделать что-то вроде этого:

for(String line;(line = input.readLine())!=null;){ 
    stringBuilder.append(line); 
} 
+0

Прежде всего, спасибо за понимание! У меня теперь есть ((строка = input.readLine())! = Null) и строка добавления, теперь она действительно читает больше правильных работ, но все же есть небольшая разница между поиском текстового редактора и этим поиском, например, словом то есть 302 раза, найденных в текстовом редакторе, найдено 299 раз с java, любая идея о том, какая небольшая разница вызвана? – DaViDa

+0

, пожалуйста, обновите свой пример выше, чтобы другие могли ответить на него, не читая это решение. – CoronA

 Смежные вопросы

  • Нет связанных вопросов^_^