Я сканирую файл и пытаюсь отследить количество раз, когда появляется персонаж.Сканирование на ошибку символов?
public static Map<Character, Integer> getCountMap(Scanner in){
Map<Character, Integer> wordCountMap = new TreeMap<Character, Integer>();
while (in.hasNext()){
Character word = in.next().toLowerCase();
//CHAR HAS BEEN SEEN, ADD
if(wordCountMap.containsKey(word)){
int count = wordCountMap.get(word);
wordCountMap.put(word, count + 1);
}
//NEW CHAR, CREATE
else {
wordCountMap.put(word, 1);
}
}
return wordCountMap;
}
Я получаю сообщение об ошибке для Character word = in.next().toLowerCase();
Я проверил Java API, и символы, безусловно, имеют доступ к toLowerCase()
. Однако апи для сканеров говорит
hasNext() Возвращает истину, если этот сканер имеет еще один маркер в его входе.
Означает ли это, что сканер не может сканировать через символ? Не следует ли это просто проверять символы, добавляя их на карту и увеличивая счет каждый раз, когда он что-то видит?
Заключительное примечание: этот код работает нормально, если каждый Character
заменен на String
. Я могу получить количество слов без проблем. Кол-во, не так много.
Основной метод (В случае, если это требуется)
public static void main(Character[] args) throws FileNotFoundException{
//read the book into the map
Scanner in = new Scanner(new File("moby.txt"));
Map<Character, Integer> wordCountMap = getCountMap(in);
for (Character word: wordCountMap.keySet()){
int count = wordCountMap.get(word);
if (count > OCCURRENCES){
System.out.println(word + " occurs " + count + " times.");
}
}
}
Вы уверены, что 'in.next()' возвращает объект 'Character'? – TNT
@TNT Я не совсем уверен. Я просто проверял API, и я даже не могу найти его в .next. Я знаю, что это работает для струн ... где бы я хотел понять это? Когда я имею дело со строками, мой сканер (в) заполняет строку следующим значением. Так что, возможно, это не принимает символ ... – Podo
@TNT, «Метод java.util.Scanner.next() находит и возвращает следующий полный токен из этого сканера». – Podo