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()会自动将扫描仪向下移动。