代码之家  ›  专栏  ›  技术社区  ›  marcoamorales

Java扫描器类读取字符串[复制]

  •  4
  • marcoamorales  · 技术社区  · 16 年前

    这个问题已经有了答案:

    我得到了以下代码:

            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]);
    

    当我运行这个代码时,扫描器只会选择名字而不是姓氏。它有时会跳过一行,当试图输入一个名字时,它会出现,好像我把名字留空了,然后跳到下一个名字。我不知道是什么引起的。

    希望有人能帮助我!

    edit:我在.nextline()中尝试过;它修复了完整的名称,但仍保留一行,下面是输出示例:

    How many names are you going to save:  3
    Type a name: Type a name: John Doe
    Type a name: John Lennon
    
    4 回复  |  直到 12 年前
        1
  •  8
  •   rogeriopvl    16 年前

    而不是:

    in.next();
    

    用途:

    in.nextLine();
    

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

        2
  •  2
  •   Amarghosh    16 年前

    Scanner.next 遇到分隔符(空白)时停止读取。使用 nextLine 方法代替。

        3
  •  2
  •   CPerkins    16 年前

    在初始nextint()之后,输入中仍然有一个空的换行符。所以只需在nextline()后面添加一个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();
    }
    ...
    

        4
  •  -1
  •   bigmike7801    12 年前

    尝试使用:

    System.out.println()
    

    而不是:

    System.out.print()