java-scanner源码杂谈

本文深入探讨了Java中Scanner类的构造方法、next()方法的工作原理,包括内部的匹配分隔模式、令牌获取等核心过程。通过对源码的分析,揭示了Scanner如何从输入流中读取数据并进行分隔。
摘要由CSDN通过智能技术生成

Scanner

Scanner sc1 = new Scanner(System.in);

private Scanner(Readable source, Pattern pattern) {
//-确定源和分割模式非空
断言,判断一个条件是否为真,否则报错

assert source != null : "source should not be null";
assert pattern != null : "pattern should not be null";

//传入输入流
this.source = source;
//传入分隔令牌模式
delimPattern = pattern;
//传入一个容量为BUFFER_SIZE(默认1024字节)的CharBuffer对象
buf = CharBuffer.allocate(BUFFER_SIZE);
//传入limit=0;Invariants: mark <= position <= limit <= capacity
buf.limit(0);
//传入用分隔模式匹配字符缓存的匹配器
matcher = delimPattern.matcher(buf);
//设置匹配器可跨边界检验匹配是否正确
matcher.useTransparentBounds(true);
//匹配器不对区域边界进行铆钉
matcher.useAnchoringBounds(false);
//传入默认的语言环境下的格式化日期、数字和货币
useLocale(Locale.getDefault(Locale.Category.FORMAT));

}

String s2=sc1.next();

读取数据至buf,匹配分隔模式,返回之间的内容

//-读取数据至buf,匹配分隔模式,返回之间的内容
查找并返回此扫描程序中的下一个完整令牌。
匹配分隔模式,返回之间的内容
public String next() {
//确保未关闭
ensureOpen();
//清理规则缓存和类型缓存 hasNextPattern = null;typeCache = null;
clearCaches();

    while (true) {
        @1	若准备工作完成,获取完整令牌
        String token = getCompleteTokenInBuffer(null);
        if (token != null) {
            matchValid = true;
            skipped 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值