从头认识java-11.5 扫描输入(2)-scanner的边界与使用正则表达式扫描
2015-12-14 00:00
531 查看
这一章节我们来介绍一下scanner的边界与使用正则表达式扫描。
1.scanner的边界
上一章节我们提到scanner里面有hasNext方法,可以检测是否还有字符串,其实这个就是边界符,检查字符串的边界。
输出:
raylee
31
1.77
2.使用正则表达式扫描
很多的时候我们都需要扫描和统计日志情况,而且一般日志都是记录在一个txt文件里面的,那么这个时候正则表达式和scanner的配合就相当有效率了,我们看下面的代码:
输出:
ip:127.0.0.1
user:admin
date:2015-12-01
ip:127.0.0.2
user:ray
date:2015-12-03
ip:127.0.0.31
user:rose
date:2015-12-05
ip:127.0.0.41
user:jack
date:2015-12-07
在上面的代码里面有一个非常需要注意地方就是正则表达式的书写,特别是几个小括号,因为通过几个小括号,才可以把字符串分组出来。如果没有小括号,后面的group(1)group(2)将会抛异常。
总结:这一章节简单讲述了scanner的边界与使用正则表达式扫描。
这一章节就到这里,谢谢。
-----------------------------------
目录
1.scanner的边界
上一章节我们提到scanner里面有hasNext方法,可以检测是否还有字符串,其实这个就是边界符,检查字符串的边界。
package com.ray.ch11; import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; import java.util.Scanner; public class Test { private BufferedReader input = new BufferedReader(new StringReader( "raylee\n31\n1.77")); public BufferedReader getInput() { return input; } public void setInput(BufferedReader input) { this.input = input; } public static void main(String[] args) throws IOException { Test test = new Test(); Scanner scanner = new Scanner(test.getInput()); while (scanner.hasNext()) { System.out.println(scanner.nextLine()); } } }
输出:
raylee
31
1.77
2.使用正则表达式扫描
很多的时候我们都需要扫描和统计日志情况,而且一般日志都是记录在一个txt文件里面的,那么这个时候正则表达式和scanner的配合就相当有效率了,我们看下面的代码:
package com.ray.ch11; import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; import java.util.Scanner; import java.util.regex.MatchResult; import java.util.regex.Pattern; public class Test { private BufferedReader input = new BufferedReader(new StringReader( "127.0.0.1@admin@2015-12-01\n" + "127.0.0.2@ray@2015-12-03\n" + "127.0.0.31@rose@2015-12-05\n" + "127.0.0.41@jack@2015-12-07\n" + "end\n")); public BufferedReader getInput() { return input; } public void setInput(BufferedReader input) { this.input = input; } public static void main(String[] args) throws IOException { Test test = new Test(); Scanner scanner = new Scanner(test.getInput()); Pattern pattern = Pattern.compile("(\\d+[.]\\d+[.]\\d+[.]\\d+)" + "@" + "([a-z]+)" + "@" + "(\\d{4}-\\d{2}-\\d{2})"); while (scanner.hasNext(pattern)) { scanner.next(pattern); MatchResult matchResult = scanner.match(); System.out.println("ip:"+matchResult.group(1)); System.out.println("user:"+matchResult.group(2)); System.out.println("date:"+matchResult.group(3)); } } }
输出:
ip:127.0.0.1
user:admin
date:2015-12-01
ip:127.0.0.2
user:ray
date:2015-12-03
ip:127.0.0.31
user:rose
date:2015-12-05
ip:127.0.0.41
user:jack
date:2015-12-07
在上面的代码里面有一个非常需要注意地方就是正则表达式的书写,特别是几个小括号,因为通过几个小括号,才可以把字符串分组出来。如果没有小括号,后面的group(1)group(2)将会抛异常。
总结:这一章节简单讲述了scanner的边界与使用正则表达式扫描。
这一章节就到这里,谢谢。
-----------------------------------
目录
相关文章推荐
- 从头认识java-12.3 instanceof、isInstance和isAssignableFrom
- 从头认识java-11.4 正则表达式(1)-感性认知
- 从头认识java-13.6 类型擦除(type erasure)(1)-概念
- 从头认识java-12.4 利用反射提取类的方法与构造器
- 从头认识java-12.2 Class对象(2)-使用与注意点
- 从头认识java-12.6 接口与类型信息(怎么绕过接口直接调用类的所有方法)
- 从头认识java-12.2 Class对象(1)-简介
- 从头认识java-13.4 泛型方法的使用
- 从头认识java-11.4 正则表达式(2)-基本语法
- 从头认识java-12.1 为什么需要RTTI(Run-Time Type Identification)?
- 从头认识java-12.2 Class对象(4)-泛化
- 从头认识java-12.5 代理以及动态代理
- 从头认识java-11.5 扫描输入(1)-简介
- 从头认识java-13.1 泛型与容器(容器的演变)
- 从头认识java-12.2 Class对象(3)-.class
- 从头认识java-13.2 利用元组的方式返回多类型对象
- 从头认识java-13.3 泛型接口的使用
- Java_07_01 正则表达式
- Java_07_02 异常处理
- echarts + websocket 解决实时刷新问题