`
sxj19881213
  • 浏览: 8513 次
社区版块
存档分类
最新评论

Scanner与Readable接口

阅读更多

Readable接口中的read()方法实现了将字符串读入charBuffer中,但是只有在需要输出的时候才会调用。

Scanner是文本扫描器类,利用Scanner扫描并输出charBuffer中的内容的顺序:以hasNext()方法为例:第一次调用hasNext(),由于此时charBuffer并无内容,等待输入,hasNext()方法阻塞,调用并执行read()方法,执行完read()方法,根据read方法的返回值来确定是否hasNext()的返回值是true或者false:若read()返回值不为-1,则认为hasNext()为true,并且继续调用read()方法;若read()返回值为-1,则认为hasNext()为false,不再调用read()方法。

另外,在输出时是根据下一个空格标记(cb.append(" "))为准,未读到空格标记之前,无论调用多少次read()方法,都不会输出,直到read()f方法返回-1或者读到空格标记,就会输出之前很多次通过read()方法加到charBuffer的字符串。

 

import java.nio.CharBuffer;
import java.util.Scanner;

class A implements Readable{

private static final char[] lowers="ABCDEFGHIJKLMOPQRSTUVWXYZ".toLowerCase().toCharArray();
private int count;
private int j = 1;

public A(int count) {
this.count = count;
}

@Override
public int read(CharBuffer cb) {
System.out.println("第"+j+"次进入read()方法");
//cb.append("aaa");
//cb.append(" ");
if (count-- == 0) {
return -1;
}
if(j==1){
System.out.println("第1次");
cb.append(" ");
//cb.append(lowers[0]);
j++; return 1;
}
if(j==2){System.out.println("第2次");cb.append(lowers[0]);j++; return 1;}
if(j==3){System.out.println("第3次");cb.append(lowers[0]);j++; return 1;}
if(j==4){System.out.println("第4次");cb.append(lowers[0]);j++; cb.append(" "); return 1;}
return 2;
}
}

public class MyScanner {

public static void main(String[] args) {
// TODO Auto-generated method stub

Scanner scan = new Scanner(new A(4));
//System.out.println(scan.hasNext()+" aaaaaaa");
while(scan.hasNext()){
System.out.println(scan.next());}
}

}

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics