Scanner类之常用方法

Scanner类之常用方法

1.构造方法

Scanner(InputStream source)
          构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。
构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。取自该流的字节通过底层平台的 默认字符集转换成字符。

实例:

Scanner sc = new Scanner(System.in);
int i = sc.nextInt();

 System类下的静态字段

static InputStream in
          “标准”输入流。

public static final InputStream in

“标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。

2.常用方法

(1)nextXxx()  

获取下一个输入项。Xxx可以是Int,Double等,默认情况下,Scanner使用空格,回车等作为分隔符

 ①public int nextInt()

int nextInt()
          将输入信息的下一个标记扫描为一个 int。

②public String nextLine()

 String nextLine()
          此扫描器执行当前行,并返回跳过的输入信息。

 此方法返回当前行的其余部分,不包括结尾处的行分隔符。当前位置移至下一行的行首。

因为此方法会继续在输入信息中查找行分隔符,所以如果没有行分隔符,它可能会缓冲所有输入信息,并查找要跳过的行。

③public String next()

 String next()
          查找并返回来自此扫描器的下一个完整标记。

 完整标记的前后是与分隔模式匹配的输入信息。即使以前调用 hasNext() 返回了 true,在等待要扫描的输入时此方法也可能阻塞。

(2)hasNextXxx()

判断是否还有下一个输入项,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,则可以省略Xxx

① public boolean hasNextInt()

 boolean hasNextInt()
          如果通过使用 nextInt() 方法,此扫描器输入信息中的下一个标记可以解释为默认基数中的一个 int 值,则返回 true。

 ②public boolean hasNext()

 boolean hasNext()
          如果此扫描器的输入中有另一个标记,则返回 true。

在等待要扫描的输入时,此方法可能阻塞。扫描器将不执行任何输入。

3.nextLine()与next()的异同点

相同点:返回值都是String类型

不同点:

①识别的标识符不同

nextLine()方法只识别行结束符(回车符)

next()在输入有效字符之后,将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。

②是否可得到带空格字符

nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。

next()会自动消去有效字符前的空格,只返回输入的字符,不能得到带空格的字符串。

        String s1,s2;
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入第一个字符串:");
        s1=sc.nextLine();
        System.out.println(s1);
        System.out.print("请输入第二个字符串:");
        s2=sc.next();
        System.out.println(s2);

 结果:

请输入第一个字符串:123 456
123 456
请输入第二个字符串:123 456
123                        //其后不包含空格,next方法自动去掉其后标识符

4.nextXxx()和nextLine()连用时出现的问题

如果使用如下程序进行读写,则会出现问题:

        String s1,s2;
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入第一个字符串:");
        s1=sc.next();
        System.out.println(s1);
        System.out.print("请输入第二个字符串:");
        s2=sc.nextLine();
        System.out.println(s2);

结果:

请输入第一个字符串:123
123
请输入第二个字符串:

Process finished with exit code 0

上述程序将next()和nextLine()顺序交换后,此时我们只输入一次123,程序就执行结束了。这是因为,我们在键盘上录入123时,其实录入的是123和\r\n,next()方法只读取到123就结束了,nextLine()自动读取了被next()去掉的/r/n作为他的结束符,所以没办法从键盘输入值。

经过验证,其他的next的方法,如nextDouble()  ,nextFloat() ,nextInt() 等与nextLine()连用时都存在这个问题。

解决办法是:

①在每一个 next()、nextDouble()  、nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将被next()去掉的Enter结束符过滤掉。

直接用nextLine()读入所需数据,后面我们会学习将字符串转换为其他类型(整数、浮点数等)的方法。

猜你喜欢

转载自blog.csdn.net/qq_40298054/article/details/83625054
今日推荐