学习Scanner类

java.util包

1)首先记住它的8中构造方法同PrintWriter类Scanner类同样可以直接对文件进行操作

Scanner(File source)  构造一个新的 Scanner,它生成的值是从指定文件扫描的,底层平台的默认字符集转换成字符。 

Scanner(File source, String csn)指定字符集  。

 

  但如果用String的话是不能指定字符集的

Scanner(String source) 构造一个新的 Scanner,它生成的值是从指定字符串扫描的,Scanner的这个构造方法允许它能作为扫描器。 

 

  注意同PrintWriter的区别,若想指定字符集就必须将目录或文件转换成File对象。不同于PrintWriter()的还有当以流作为输入对象时,他是可以指定字符集的

Scanner(InputStream source) 构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。 

Scanner(InputStream source, String charsetName) 构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。

 还有Scanner能够将实现Readable,ReadableByteChannel接口的类作为参数

Scanner(Readable source)  构造一个新的 Scanner,它生成的值是从指定源扫描的。 

Scanner(ReadableByteChannel source) 构造一个新的 Scanner,它生成的值是从指定信道扫描的。 

Scanner(ReadableByteChannel source, String csn) 构造一个新的 Scanner,它生成的值是从指定信道扫描的。

2)Scanner类实现了Iterator接口

所以它有boolean hasNext()方法

Object next()方法

void remove()方法

3)常用方法

1.useDelimiter()【useDelimiter使用定界符的意思】将Scanner类的分隔模式设置为指定模式,这个方法让Scanner对象成为了扫描器(参见API)

例如:

 

String input = "1 fish 2 fish red fish blue fish";
     Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
     System.out.println(s.nextInt());
     System.out.println(s.nextInt());
     System.out.println(s.next());
     System.out.println(s.next());
     s.close(); 

 

输出为:

     1
     2
     red
     blue 
补充:

\s——代表任何空白字符

\S——代表任何非空白字符

以下代码使用正则表达式同时解析所有的 4 个标记,并可以产生与上例相同的输出结果:

     String input = "1 fish 2 fish red fish blue fish";
     Scanner s = new Scanner(input);
     s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");
     MatchResult result = s.match();
     for (int i=1; i<=result.groupCount(); i++)
         System.out.println(result.group(i));
     s.close();
补充:

\d——代表任何数字字符,即[0-9]

\D——代表任何非数字字符

\w——代表任何单字字符(字母a~z、A~Z、下划线、0~9),即[a-zA-Z_0-9]

\W——代表任何非单字字符

下面的例子帮助你记住该段

import java.util.regex.Pattern; import java.util.regex.Matcher; public class RegexTest3 { public static void main(String[] args) {

String str ="We call this the live-code approach.These examples are available from three locations-they are "             +"on the CD that accompanies this book"; String  regex = "[a-zA-Z]+";  //根据单词的特性准备一个正则表达式。 Pattern  pObj = Pattern.compile(regex); //1 匹配模式对象。 Matcher  mObj = pObj.matcher( str ); //2 将正则表达式转换成一个匹配器 System.out.println("你给定的字符串如下: \n\"" + str + "\"");

System.out.println("\n以上字符串中包含的单词分别如下:");

int counter = 0;

while( mObj.find()) {//3 查找 String word = mObj.group();//4 获取 counter++;//计数 System.out.println("第" + counter + "单词是: " + word ); //处理(显示) }

} }

2.下面的方法和DataInputStream中的方法readXxx()类似

    nextXxx()从流中读取一个Xxx并返回Xxx值。具体详见API

posted @ 2012-11-03 23:15  编程小爬虫  阅读(319)  评论(0编辑  收藏  举报