关于Scanner一些用法

以前上课接触过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());
    }

}


 

 

 

 
 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值