如果你想下一个标记将被解读为一个字符串,你应该使用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());
}
}
什么是错误? – 2014-09-03 08:55:19
我可以将多个值添加到单个哈希映射吗? – seriallchiller 2014-09-03 09:04:53
是的,你可以,看@ Daniel或我的答案 – nem035 2014-09-03 09:17:40