Java Scanner类读取字符串

我得到以下代码:

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 

请注意它是如何跳过第一个名称的? 它跳过它并直接进入第二个名称。 我试过看是什么导致了这个,但我似乎无法指出它。 我希望有一个人可以帮助我。 谢谢

出错的原因是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(); } 

使用sc.nextLine(); 两次,以便我们可以读取最后一行的字符串

sc.nextLine()sc.nextLine()

这是因为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(); } 

这是因为in.nextInt()只接收一个int号,不接收新行。 因此,输入3并按“Enter”,行尾由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(); } 

你可以简单地更换

names[i] = in.nextLine(); names[i] = in.next();

使用next()只会返回空格之前的内容。 返回当前行后,nextLine()会自动将扫描仪向下移动。