使用Scanner查找一些特殊字符串的正则表达式

利用Scanner的findInLine可以在当前行中查找符合正则表达式的子字符串。使用findInLine可以一定程度上代替C语言的sscanf。findInLine可以自动跳过无用的字符串,这与sscanf的特性相同。

如果当前行没有合适的子字符串,且源字符串还有下一行,则需要调用nextLine进入下一行重新查找。

这里列出一些目前常用的正则表达式:

  1. 查找boolean字符串:[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee]。它的特点是不区分大小写,可识别"true"和"false";
  2. 查找小数字符串:[\+-]?\d+\.\d*|[\+-]?\d*\.\d+。它用于查找带有一个小数点的数字。小数点左边或右边可以无数字。可识别"1.123"(小数点既不在最左,也不在最右)、".123"(小数点在最左)、"123."(小数点在最右);
  3. 查找科学计数字符串:[\+-]?\d+\.\d*[  ]*[eE][\+-]?\d+|[\+-]?\d*\.\d+[  ]*[eE][\+-]?\d+|[\+-]?\d+[  ]*[eE][\+-]?\d+。它用于查找含'e'或'E'的小数;
  4. 查找整数字符串:[\+-]?\d+。用于连续的纯数字;
  5. 查找各种数字和浮点数:[\+-]?\d+\.\d*[  ]*[eE][\+-]?\d+|[\+-]?\d*\.\d+[  ]*[eE][\+-]?\d+|[\+-]?\d+[  ]*[eE][\+-]?\d+|[\+-]?\d+\.\d*|[\+-]?\d*\.\d+|[\+-]?\d+。即科学计数、小数、整数按先后顺序并联起来。

使用Scanner时,需要考虑到程序性能。因为Scanner的性能不佳,如果只是相查找简单的数字格式,可以看看我另一篇文章:

分享java sscanf函数

使用sscanf可以达到近百倍的速度,但是它的功能还不完整,无法读取科学计数格式的数字,不支持C语言sscanf的很多高级特性。使用前请试验一下,看看是否有你需要的功能,如果没有你要的功能,再考虑使用Scanner。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值