Java的扫描仪类阅读串[复制](Java Scanner class reading string

2019-07-19 03:58发布

这个问题已经在这里有一个答案:

  • Java的扫描仪类阅读琴弦 5个回答

我得到了下面的代码:

        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.next();
    }

    System.out.println(names[0]);

当我运行这段代码,扫描仪将只拿起第一个名字,而不是姓氏。 并试图输入一个名称时,它有时会跳行,它会显示为,如果我离开了名的空白,并跳到下一个名字。 我不知道是什么导致了这一点。

我希望有一个人可以帮助我!

编辑:我曾尝试in.nextLine(); 它修复了全名,但它仍然保持一条线,这里是输出的一个例子:

How many names are you going to save:  3
Type a name: Type a name: John Doe
Type a name: John Lennon

Answer 1:

代替:

in.next();

使用:

in.nextLine();

nextLine()读取字符,直到它找到一个新行字符'\n'



Answer 2:

Scanner.next停止阅读时遇到一个分隔符,这是一个空白。 使用nextLine方法来代替。



Answer 3:

您的初始nextInt()之后,仍然有在你输入一个空的换行。 所以只要你的nextInt()后添加nextLine(),然后进入你的循环:

 ... Scanner in = new Scanner(System.in); nnames = in.nextInt(); in.nextLine(); // gets rid of the newline after number-of-names names = new String[nnames]; for (int i = 0; i < names.length; i++){ System.out.print("Type a name: "); names[i] = in.nextLine(); } ... 



Answer 4:

尝试使用:

System.out.println()

代替:

System.out.print()


文章来源: Java Scanner class reading strings [duplicate]