В случае, если вы хотите, чтобы следующий маркер для чтения в виде строки, вы должны использовать next()
метод и не nextLine()
. nextLine() возвращает строку, пропущенную не текущей строкой, как вы думаете.
От nextLine() Javadoc:
Авансы этот сканер мимо текущей строки и возвращает вклад, который был пропущен. Этот метод возвращает остальную часть текущей строки, за исключением разделителя строк в конце. Позиция устанавливается в начало следующей строки. Поскольку этот метод продолжает поиск через вход, ищущий разделитель строк, он может буферизовать весь входной поиск линии, чтобы пропустить, если нет разделителей строк.
Возвращает: линия, которая была пропущена
Изменение:
String name = in.nextLine();
к
String name = in.next();
исправит ваши проблемы. Это все, что вам нужно.
Далее вам нужно некоторое условие, чтобы закончить чтение ввода. Вы можете использовать какое-то ключевое слово, и когда это ключевое слово читается, вы знаете, что время заканчивается чтением ввода.
Полный и проверенный пример здесь:
private static final String EXIT_KEYWORD = "exit";
public static void main(final String[] args) {
Hashtable<String, Integer> names = new Hashtable<String, Integer>();
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String name = in.next();
if (EXIT_KEYWORD.equals(name)) {
break;
}
int age = in.nextInt();
names.put(name, age);
}
for (Map.Entry<String, Integer> entry : names.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
Какая ошибка? –
Могу ли я добавить несколько значений в один хэш-файл? – seriallchiller
да, вы можете, посмотрите на @ Daniel или мой ответ ниже – nem035