Было ли предписано, что это назначение выполняется на Java? Сама идея «символьного символа», а не просто использования ограничителя строки, довольно причудлива.
В любом случае, вы можете добиться желаемого поведения, установив разделитель Scanner
:
keyboard.useDelimiter("\\.");
Что касается зацикливания, большой намек на это:
int[] counts;
counts[chars[0] - 'a'] = counts[chars[0] - 'a'] + 1;
или просто
counts[chars[0] - 'a']++;
Я оставлю это на ваше усмотрение, чтобы включить это в цикл.
Редактировать
Если вы ищете ввод символов за раз, я бы предложил вам использовать InputStreamReader
вместо Scanner
для ввода. Вот основной скелет того, на что это похоже:
Reader reader = new InputStreamReader(System.in);
while (true) {
int nextInput = reader.read();
if (nextInput == -1) {
System.out.println("End of input reached without sentinal character");
break;
}
char nextChar = (char) nextInput;
//deal with next character
}
Тем не менее, read()
обычно блокируется, пока не будет достигнут конец ввода ( CTRL - D или CTRL - Z с большинства консолей) или новая строка отправляется. Таким образом, часовой символ имеет ограниченное использование, так как вам все равно придется что-то делать после ввода ".".