关闭

about java Scanner

标签: java
114人阅读 评论(0) 收藏 举报
分类:

</pre>java.util.Scanner类算是一个不常用的类,其本身提供的方法也不算多,下面就简单介绍下Scanner类。<p></p><p></p><pre name="code" class="java">Scanner sca = new Scanner(System.in);
利用此构造方面可以键盘获取输入,当得到Scanner对象时,调用其hasNext、next、hasNextLine、nextLine等含有next的方法都会造成一个阻塞以便等待键盘输入。

while(sca.hasNext()){
<span style="white-space: pre;">	</span>dosomething<span style="font-family: Arial, Helvetica, sans-serif;">;</span>
}
上面的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了。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    文章分类
    个人资料
    • 访问:118次
    • 积分:11
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档
    阅读排行
    评论排行