如何使用scanner类获取String变量的正确输入?

时间:2014-10-08 16:13:22

标签: java java.util.scanner

我正在学习Java,我正在尝试输入程序。当我尝试使用实例向Scanner类输入整数和字符串时,出现错误,我无法输入字符串。当我首先输入字符串和后输入int时,它工作正常。当我使用不同的对象到Scanner类时,它也可以正常工作。但是,当我尝试首先输入int而下一个使用相同的实例将字符串输入Scanner类时,此方法的问题是什么?

import java.util.Scanner;

public class Program {
    public static void main(String[] args) {

        Scanner input=new Scanner(System.in);

        //Scanner input2=new Scanner(System.in);

        System.out.println("Enter your number :" );

        int ip = input.nextInt();

        System.out.println("Your Number is : " + ip);

        System.out.println("Enter Your Name : ");

        String name= input.nextLine();

        System.out.println("Your Next is : " + name);
    }
}

2 个答案:

答案 0 :(得分:4)

nextInt()不等待行尾 - 它默认等待令牌的结尾,这是任何空格。例如,如果您使用当前代码在第一行输入“27 Jon”,则ip的值为Jonname的值为input.nextLine()

如果你真的想要消费一个完整的行,你最好也可以调用Integer.parseInt来输入数字,然后使用Scanner来解析该行。除了其他任何内容,它代表您实际想要做的事情 - 输入两个的文本,并将第一个解析为数字。

就个人而言,我不是{{1}}的忠实粉丝 - 它有很多像这样的陷阱。我确信它的使用方式完全符合设计师的预期,但要说出它的含义并不容易。

答案 1 :(得分:0)

这个工作正常,无论如何要保存IP地址,它必须是String。

import java.util.Scanner;

public class Program {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        //Scanner input2=new Scanner(System.in);
        System.out.println("Enter your number :");

        int ip = input.nextInt();

        System.out.println("Your Number is : " + ip);

        System.out.println("Enter Your Name : ");

        input.nextLine();

        String name = input.nextLine();

        System.out.println("Your Next is : " + name);
    }
}