在Scanner.nextInt()之后使用Scanner.nextLine()

时间:2012-07-13 06:12:19

标签: java java.util.scanner

import java.util.Scanner;

public class Hello {

    public static void main(String args[]) {
        Scanner in = new Scanner(System.in);
        int a;
        String s;

        System.out.println("Enter int : ");
        a = in.nextInt();
        System.out.println("Enter String : ");

        s = in.nextLine();
        System.out.println("int : "+a+"\nString : "+s);
    }
}

我是Java的初学者。我创建了类Hello并希望输入一个数字和一个字符串,但我认为s = in.nextLine();此行被忽略。如何逐行输入两个值。

4 个答案:

答案 0 :(得分:4)

当您使用Scanner.nextInt()时,它不会消耗新行(或其他分隔符)本身,因此返回的下一个标记通常是空字符串。因此,您需要使用Scanner.nextLine()来关注它。您可以放弃结果,而不是将结果分配给a

int a = in.nextInt(); 
in.nextLine();

出于这个原因,我建议总是使用nextLine(或BufferedReader.readLine())并在使用Integer.parseInt()后进行解析。

答案 1 :(得分:1)

而不是

s = in.nextLine();

in.nextLine();
s = in.nextLine();

对nextInt()的调用仍会留下尾随换行符。

调用in.nextLine()实际上转到下一行。然后in.nextLine将获得您的实际结果。

答案 2 :(得分:0)

尝试这样:D

import java.util.Scanner;

public class Hello {
    public static void main(String args[]) {
        Scanner in = new Scanner(System.in);
        int a;
        String s = null;
        System.out.print("Enter int: ");
        a = in.nextInt();

        while ((s = in.nextLine()).trim().isEmpty()) {
            System.out.print("Enter String: ");
        }

        System.out.println("int : " + a + "\nString : " + s);
    }
}

答案 3 :(得分:0)

import java.util.Scanner;
public class Hello{
    public static void main(String args[]){
        Scanner in = new Scanner(System.in);
        int a;
        String s;
        System.out.println("Enter int : ");
        a = in.nextInt();
        System.out.println("Enter String : ");
        s = in.next();
        System.out.println("int : "+a+"\nString : "+s);
    }
}