您的位置:首页 > 编程语言 > Java开发

about java Scanner

2015-07-06 18:50 519 查看
java.util.Scanner类算是一个不常用的类,其本身提供的方法也不算多,下面就简单介绍下Scanner类。
Scanner scan = new Scanner(System.in);
利用此构造方面可以键盘获取输入,当得到Scanner对象时,调用其hasNext、next、hasNextLine、nextLine等含有next的方法都会造成一个阻塞以便等待键盘输入。
while(scan.hasNext()){
    dosomething
}上面的while循环将会一直造成阻塞等待用户输入,一旦Scanner对象创建(没有close,close后调用hasNext抛异常)其hasNext总是会为true等待用户输入。
我们在处理完自己的逻辑业务后,可以break出while循环不再受阻塞。友情提示跳出后记得将Scanner对象close.close后将不能再调用其他方法。

注意:boolean hasNextLine():返回输入源中是否还有下一行。这种说法不对,这个真心是等待输入。有了输入他才会返回true。

next()和nextLine()区别:

不想描述太多,直接看结果……public static void main(String[] args) {
Scanner sca = new Scanner(System.in);
String next = sca.next();
Scanner scaLine = new Scanner(System.in);
String nextLine = scaLine.nextLine();
System.out.println("scanner next:"+next);
System.out.println("scanner nextLine:"+nextLine);
sca.close();
scaLine.close();
}输入:
are you ok?
are you ok?
输出:
scanner next:are
scanner nextLine:are you ok?
总结
由此可见next()方法和nextLine()方法区别是:next()方法在遇到空格、Tab或Enter键时将会终止;
而nextLine()只有遇到Enter键才会终止。
另外当先调用next后,再调用nextLine或next将不会再造成阻塞等待输入,而是将此行中t剩下的数据得到。
但是先调用nextLine后,在调用next依旧会造成阻塞等待输入。

自定义分割符:
next默认的分割符为空格、Tab、Enter;nextLine默认的分割符为Enter;
我们可以利用Scanner对象的useDelimiter方法来自定义分隔符。
public static void main(String[] args) {
Scanner sca = new Scanner(System.in);
sca.useDelimiter("\n");
System.out.println(sca.next());
sca.close();
}输入:are you ok?
输出:are you ok?
此时next的分隔符也变成了Enter而不是空格和Tab了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java