Java Scanner类读取字符串

mar*_*les 26 java string duplicates java.util.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();
}
Run Code Online (Sandbox Code Playgroud)

该代码的输出如下:

How many names are you going to save:3 
Type a name: Type a name: John Doe
Type a name: John Lennon
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*hua 26

出错的原因是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();
}
Run Code Online (Sandbox Code Playgroud)

或者只是读取该行并将该值解析为整数.

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();
}
Run Code Online (Sandbox Code Playgroud)


Ank*_*kar 5

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

sc.nextLine()sc.nextLine()