Java — метод, предлагающий пользователю ввести файл

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

Дело в том, что я хочу использовать для этого метода массив с фиксированным размером 1000. Я уже объявил массив строк — String [] words = new String [1000] — внутри класса; однако я не уверен, как интегрировать его в этот метод, чтобы хранить каждое слово файла. Любые комментарии будут очень признательны!

Это то, что у меня есть до сих пор:

public static void inputFile() throws Exception
{
        java.io.File file = new java.io.File("123.txt");      
        try 
        {
            Scanner input = new Scanner(file);   
            while (input.hasNextLine()) 
            {
                String list = input.next();
                System.out.println(list);
            }
            input.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }


}

person SdlS    schedule 07.05.2014    source источник


Ответы (2)


Вам не нужно сохранять содержимое файла в объект. Изучив JavaDocs, вы увидите, что методы Scanner поддерживают регулярное выражение.

Просто читайте и ищите:

File file = new File("file.txt");

Scanner scanner = null;
try
{
    scanner = new Scanner(file);
}
catch (FileNotFoundException e){}

int i = 0;
while(scanner.hasNext("word"))
{
    scanner.next("word");
    i++;
}

System.out.println(i +" occurances of the word 'word'");
person Leo Pflug    schedule 07.05.2014
comment
Итак, мне не нужно передавать массив в качестве параметра для этого метода? - person SdlS; 07.05.2014
comment
Что ж, вы хотите подсчитать появление слова, вам просто нужно изменить слово, которое вы ищете в моем примере. - person Leo Pflug; 07.05.2014

Массив - неправильная структура для этого. Вам нужен HashMap, который будет содержать текущий счет для каждого слова. Вы получаете текущее количество слов, меняете значение null на 0, затем добавляете 1 и возвращаете его на карту. Вы можете сократить его до 1000, как хотите.

person Thom    schedule 07.05.2014