2015-03-09 2 views
1

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

ответ

1

Существует много способов. Если вы читаете файл по очереди, вы можете использовать метод indexOf класса String для поиска в каждой строке текста. Вам нужно будет называть это повторно, чтобы переместиться по линии, ища дополнительные вхождения.

См документация по indexOf адресу:

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(java.lang.String,%20int)

0

Как я понимаю ваш вопрос, если вы читаете строку текста после строки вы можете использовать рекурсивность подсчитать, сколько вхождений слов появляются в том же линия:

Следующая отсчеты метод, сколько раз появляется слово в одной и той же линии

private static int numberOfLineOccurences; 

public static int countNumberOfTimesInALine(String line, String word) { 
    if (line.indexOf(word) == -1) { 
     return numberOfLineOccurences; 
    } else { 
     numberOfLineOccurences++; 
     if (line.indexOf(word) + word.length() > line.length() -1 ) { 
      return numberOfLineOccurences; 
     } 
     return countNumberOfTimesInALine(
       line.substring(line.indexOf(word) + word.length()), word); 
    } 

} 

Для того, чтобы следить за работой первого вхождения моего слова в моем файле вместе с числом встречаемости я создал класс WordInfo так:

class WordInfo { 

    private int firstOccurenceLineNumber; 
    private int firstOccurenceColumnNumber; 
    private String word; 
    private int numberOfOccurences; 

    public String getWord() { 
     return word; 
    } 

    public int getNumberOfOccurences() { 
     return numberOfOccurences; 
    } 

    public WordInfo(String word) { 
     this.word = word; 
    } 

    public void upOccurrence() { 
     numberOfOccurences++; 
    } 

    public void upOccurrence(int numberOfTimes) { 
     numberOfOccurences+= numberOfTimes; 
    } 

    public int getFirstOccurenceLineNumber() { 
    return firstOccurenceLineNumber; 
    } 

    public void setFirstOccurenceLineNumber(int firstOccurenceLineNumber) { 
     this.firstOccurenceLineNumber = firstOccurenceLineNumber; 
    } 

    public int getFirstOccurenceColumnNumber() { 
     return firstOccurenceColumnNumber; 
    } 

    public void setFirstOccurenceColumnNumber(int  firstOccurenceColumnNumber) { 
     this.firstOccurenceColumnNumber = firstOccurenceColumnNumber; 
    } 
} 

Теперь я могу создать свой метод для поиска. Я даю ему слово для поиска, имя файла и объект WordInfo для заполнения в качестве входных параметров

public static boolean searchWord(String word, String filePath, WordInfo wInfo) throws IOException { 

    boolean result = false; 
    boolean firstOccurenceFound = false; 
    int lineNumber = 0; 

    BufferedReader reader = new BufferedReader(new FileReader(new File(filePath))); 
    String line = null; 

    while ((line = reader.readLine()) != null) { 

     lineNumber++; 

     numberOfLineOccurences= 0; 

     if (line.indexOf(word) != -1) { 
      if (!result) { 
       result = true; 
      } 
      if (!firstOccurenceFound) { 
       firstOccurenceFound = true; 
       wInfo.setFirstOccurenceLineNumber(lineNumber); 
       wInfo.setFirstOccurenceColumnNumber(line.indexOf(word) + 1); 


      } 
      wInfo.upOccurrence(countNumberOfTimesInALine(line, word)); 
     } 


    } 

    reader.close(); 

    return result; 
} 

Вот иллюстрация и результат ниже

У меня есть следующее содержимое в файл с именем DemoFile. TXT

data example for test here

И я проверить код, используя следующий основной метод (я ищу слова concept, например):

public static void main(String[] args) throws IOException { 
    WordInfo wInfo = new WordInfo("concept"); 
    if (searchWord("concept", FILE_PATH, wInfo)) { 
     System.out.println("Searching for " + wInfo.getWord()); 
     System.out.println("First line where found : " + wInfo.getFirstOccurenceLineNumber()); 
     System.out.println("First column found: " + wInfo.getFirstOccurenceColumnNumber()); 
     System.out.println("Number of occurrences " + wInfo.getNumberOfOccurences()); 


    } 


} 

И я получить следующие результаты:

enter image description here

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