Java Scanner 类读取字符串
Posted
技术标签:
【中文标题】Java Scanner 类读取字符串【英文标题】:Java Scanner class reading strings 【发布时间】:2010-11-30 18:52:20 【问题描述】:我得到以下代码:
int nnames;
String names[];
System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = in.nextInt();
names = new String[nnames];
for (int i = 0; i < names.length; i++)
System.out.print("Type a name: ");
names[i] = in.nextLine();
该代码的输出如下:
How many names are you going to save:3
Type a name: Type a name: John Doe
Type a name: John Lennon
注意它是如何跳过名字条目的?它跳过它,直接进入第二个名字条目。我已经尝试寻找导致这种情况的原因,但我似乎无法确定它。我希望有一个人可以帮助我。谢谢
【问题讨论】:
***.com/questions/1466008/… 的精确(真正、精确)匹配 【参考方案1】:错误的原因是 nextInt 只拉取整数,而不是换行符。如果你在你的 for 循环之前添加一个 in.nextLine() ,它会吃掉新的空行并允许你输入 3 个名字。
int nnames;
String names[];
System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = in.nextInt();
names = new String[nnames];
in.nextLine();
for (int i = 0; i < names.length; i++)
System.out.print("Type a name: ");
names[i] = in.nextLine();
或者只是读取该行并将值解析为整数。
int nnames;
String names[];
System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = Integer.parseInt(in.nextLine().trim());
names = new String[nnames];
for (int i = 0; i < names.length; i++)
System.out.print("Type a name: ");
names[i] = in.nextLine();
【讨论】:
【参考方案2】:使用 sc.nextLine();两次,以便我们可以读取字符串的最后一行
sc.nextLine() sc.nextLine()
【讨论】:
【参考方案3】:这是因为 in.nextInt() 没有换行。所以你首先“输入”(在你按下 3 之后)导致你的 in.nextLine() 在你的循环中读取 endOfLine。
你可以做一个小改动:
int nnames;
String names[];
System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = Integer.parseInt(in.nextLine());
names = new String[nnames];
for (int i = 0; i < names.length; i++)
System.out.print("Type a name: ");
names[i] = in.nextLine();
【讨论】:
【参考方案4】:这是因为 in.nextInt() 只接收一个 int 数字,不接收一个新行。所以你输入 3 并回车,行尾被 in.nextline() 读取。
这是我的代码:
int nnames;
String names[];
System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = in.nextInt();
in.nextLine();
names = new String[nnames];
for (int i = 0; i < names.length; i++)
System.out.print("Type a name: ");
names[i] = in.nextLine();
【讨论】:
【参考方案5】:你可以简单地替换
names[i] = in.nextLine();
与 names[i] = in.next();
使用 next() 只会返回空格之前的内容。 nextLine() 返回当前行后自动下移扫描仪。
【讨论】:
以上是关于Java Scanner 类读取字符串的主要内容,如果未能解决你的问题,请参考以下文章