正则表达式在Java语言程序编程时如何从文件中读取数据并运用
1.读取文件
读取文件的方式有很多,这里我简单地使用字符串标明路径,通过路径创建文件型变量(File)。
String filepath="src/txt/test.txt";
File file=new File(filepath);
Scanner fileread =new Scanner(file);
这时我们能够从文件以字符串的形式读取内容,通过相关的正则表达式来判断内容是否正确。
2.转换文件信息
我们无法直接从文件里获取数据给程序中的变量,因此我们要暂时存储数据
String text="";
while(fileread.hasNext()) {
text+=fileread.nextLine();
text+="\n";
}
fileread.close();
这里为了保证文件读取后转换为String类型时其内容的结构不变(如果你使用过正则语言表达式,你会发现空格是很恶心的东西),所以我们使用Scanner.nextLine()来成行地读取数据。
3.再次提取信息
String s;
Pattern pattern=Pattern.compile(String parser);
Matcher m=pattern.matcher(s);
while(m.find()){
System.out.println(m.group());
}
这是一段很经典的正则语言匹配代码,parser为字符串类型变量,它表示的是正则语言表达式;而m可以看作是正则表达式在s中索引内容parser的一个方法概括,m.find()代表正则表达式找到了一个匹配的对象,此时如果再m.find()的话正则表达式会去寻找下一个匹配的对象(这一点和next()很像)。在这里要注意的是m.group()返回的是m.find()找到的对象,这就意味着,如果开始时没有m.find(),m.group()是不起作用的;同时,如果只进行一次m.find(),无论输出多少次m.group()都只是最靠近的一次m.find()找到的内容。
4.提取变量内容
在这里,比如说我想提取一段时间,文本内容是
{2021-01-01,2021-02-03}
这里我们进行一下简单约束,我们可以设计一个正则语言把时间提取出来
parser="//{20[0-9][0-9]-[0-9][0-9]-[0-9][0-9],20[0-9][0-9]-[0-9][0-9]-[0-9][0-9]//}";
通过我上述的代码完全可以获得
String message=m.group();
我们再精确提取时间
int year1, year2, month1, month2, day1, day2;
Pattern Year=pattern.compile("20[0-9][0-9]");
Pattern Month=pattern.compile("[0-9][0-9]");
Pattern Day=pattern.compile("[0-9][0-9]");
Matcher year=Year.matcher(message);
Matcher month=Month.matcher(message);
Matcher day=Day.matcher(message);
year.find();//**2021**-01-01,2021-02-03
year1=Integer.parseInt(year.group());
year.find();//2021-01-01,**2021**-02-03
year2=Integer.parseInt(year.group());
month.find();//**20**21-01-01,2021-02-03
month.find();//20**21**-01-01,2021-02-03
month.find();//2021-**01**-01,2021-02-03
month1=Integer.parseInt(month.group());
month.find();//2021-01-**01**,2021-02-03
month.find();//2021-01-01,**20**21-02-03
month.find();//2021-01-01,20**21**-02-03
month.find();//2021-01-01,2021-**02**-03
month2=Integer.parseInt(month.group());
day.find();//**20**21-01-01,2021-02-03
day.find();//20**21**-01-01,2021-02-03
day.find();//2021-**01**-01,2021-02-03
day.find();//2021-01-**01**,2021-02-03
day1=Integer.parseInt(day.group());
day.find();//2021-01-01,**20**21-02-03
day.find();//2021-01-01,20**21**-02-03
day.find();//2021-01-01,2021-**02**-03
day.find();//2021-01-01,2021-02-**03**
day2=Integer.parseInt(day.group());
此时变量数据便提取了出来。