关于Scanner一些用法

来源:互联网 发布:mac安装iphone应用 编辑:程序博客网 时间:2024/05/16 17:21

以前上课接触过Java Scanner 还做了个文法分析器,刚刚碰巧看了《Thinking in Java》关于Scanner用法,总觉得很陌生。比如说nextInt()方法是返回当前分词的int ,如果当前分词判断并非为int,那么就会报java.util.InputMismatchException。而Scanner对分词进行判断是挨个来的,Scanner的默认分词符是空字符,

假设要找出字符串s中的int类型,代码如下:
 

     String s = "12 ab 34";     Scanner sc = new Scanner(s);           int mInt = 0;     while (sc.hasNextInt()) {                 mInt = sc.nextInt();        System.out.println("mInt: " + mInt);     } }


结果是:

mInt: 12

后面的34不会出现,原因是分词为ab的时候就退出循环了。

要得到结果:

mInt: 12

mInt: 34

把代码改为如下: 用hasNext()过滤每一个分词

     String s = "12 ab 34";     Scanner sc = new Scanner(s);     int mInt = 0;     while (sc.hasNext()) {          if (sc.hasNextInt()) {            mInt = sc.nextInt();            System.out.println("mInt: " + mInt);        }     } }


 

一道习题:

编写一个包含int、long、float、String属性的类,编写一个构造器,接受一个String参数。然后扫描该字符串,为各个属性赋值。

代码如下:

package pattern;import java.util.Scanner;public class TestScanner {    private int mInt;    private long mLong;    private float mFloat;    private String mString;    public TestScanner(String s) { Scanner scanner = new Scanner(s); while (scanner.hasNext()) {     if (scanner.hasNextInt()) {  mInt = scanner.nextInt();     } else if (scanner.hasNextLong()) {  mLong = scanner.nextLong();     } else if (scanner.hasNextFloat()) {  mFloat = scanner.nextFloat();     } else if (scanner.hasNext()) {  mString = scanner.next();     } }    }    @Override    public String toString() { // TODO Auto-generated method stub return "MyAttr are: " + "mInt: " + mInt + " mLong: " + mLong  + " mFloat: " + mFloat + " mString: " + mString;    }    /**     * @param args     */    public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(new TestScanner("0.1 899798798 khkjshf 82")  .toString());    }}