读取文本文件,利用java正则转换为pojo

1.文件在工程位置:

2.pojo对象 Person.java
import java.io.Serializable;
public class Person implements Serializable{
 private static final long serialVersionUID = 1L;
 private String id;
 private String name;
 private int age;
 private String desc;
 
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public String getDesc() {
  return desc;
 }
 public void setDesc(String desc) {
  this.desc = desc;
 }
 public static long getSerialVersionUID() {
  return serialVersionUID;
 }
}
3.文本文件 regex.info内容
 
id="CN11006";name="李立";age=26;desc="你好!";
id="CN11012";name="夏雨";age=22;desc="呵呵!";
 
4.测试main    Testregex.java
 import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * @author Administrator
 * @desc java正则表达式测试,文本文件(若加密,可先解密)--》pojo
 */
public class Testregex {
 public static void main(String[] args) throws IOException {
  //读取文件
  Reader r = new FileReader("regex.info");
  BufferedReader br = new BufferedReader(r);
  //list集合
  List<Person> list = new ArrayList<Person>();
  //匹配正则表达式,部分字符需转义
  String regex = "id=\"( \\S+)\";name=\"(\\S+)\";age=(\\d+);desc=\"(\\S+)\";";
  //编译表达式
  Pattern p = Pattern.compile(regex);
  String str="";
  //读取文件一行数据
  while((str=br.readLine())!= null &&!"".equals(str.trim())){
   //获取匹配器,通过解释 Pattern 对 字符序列 执行匹配操作
   Matcher m = p.matcher(str);
   //实例化pojo对象
   Person person =new Person();
   if(m.find()){
    /*
     获取正则表达式中,匹配要获取的数据
     "id=\"( \\S+)\";name=\"(\\S+)\";age=(\\d+);desc=\"(\\S+)\";";
     m.group(0) --》 匹配的所有数据
     m.group(1)--》第一个捕获的数据,即id:( \\S+)括号内的数据
     .
     .
     m.group(4)--》第四个捕获的数据,即desc:desc=\"( \\S+)\"括号内的数据
     */
    person.setId(m.group(1));
    person.setName(m.group(2));
    person.setAge(Integer.parseInt(m.group(3)));
    person.setDesc(m.group(4));
    //将实例add到list集合
    list.add(person);
   }
  }
  //关闭流
  br.close();
  //打印对象数据
  for(Person e : list){
   System.out.println(e.getId()+":"+e.getName()+":"+e.getAge()+":"+e.getDesc());
  }
 }
}
如想了解更多,请网上查询资料.....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值