【问题标题】:Java Scanner class reading strings [duplicate]Java Scanner类读取字符串[重复]
【发布时间】:2010-11-30 18:17:29
【问题描述】:

我得到以下代码:

        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

【问题讨论】:

标签: java string class duplicates java.util.scanner


【解决方案1】:

代替:

in.next();

用途:

in.nextLine();

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

【讨论】:

    【解决方案2】:

    在您最初的 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();
    }
    ...
    

    【讨论】:

    • +1 我最近输掉了一场编程比赛,因为我使用 next() 而不是 nextLine() 跳过了第一个 \\n 。那太愚蠢了:(
    • 那个 CodeJam 是偶然的吗?我今年第一次参加比赛,结果被打败了——甚至没有进入第 2 轮。但我在资格赛和第 1 轮中玩得很开心,明年我会回来的。
    【解决方案3】:

    Scanner.next 在遇到分隔符(即空格)时停止读取。请改用nextLine 方法。

    【讨论】:

      【解决方案4】:

      尝试使用:

      System.out.println()
      

      代替:

      System.out.print()
      

      【讨论】:

        猜你喜欢
        • 2010-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-17
        • 2016-12-21
        • 2018-02-05
        • 1970-01-01
        相关资源
        最近更新 更多