定制设计java读取txt文件,正则匹配,提取特定开头和结尾的字符串

java提取txt定制设计文件中指定内容

前言

定制设计前天刚入职的算法同事,定制设计过来问我怎么提取txt定制设计文件中的数据,定制设计我一看这还不简单,结果…搞了好久。

定制设计正则不用真的会忘记,定制设计写篇博客增加一下记忆吧。

需求:提取txt文件中,定制设计有特定开头(双引号) ,特定结尾(双引号) 定制设计的中间的数据,打印出来


一、使用FileInputStream处理

FileInputStream:是java中的字节输入流,就是通过字节的形式进行读取

构造方法 可以通过传递指定打开文件的路径字符串,来创建FileInputStrem对象

new FileInputStrem("文件路径")  
  • 1

InputStremReader 是连接和字符流之间的桥梁,我们通过 new InputStremReader() 的构造方法,传递一个FileInputStrem对象,和一个编码格式,这个编码格式具体根据你要读取文件的编码格式

InputStreamReader(file,"UTF-8");
  • 1

编码格式可以打开txt文件在右下角查看

// 这里利用了一下小技巧就是 我这个同事给我的文件 每个要提取的数据都在同一行内,所以可以通过每行读取。

        while ((line = br.readLine()) != null) {            System.out.println(getPatternCode(line,rgex));        }
  • 1
  • 2
  • 3

二、使用正则开始匹配

1.匹配规则书写

正则表达式匹配规则 这里是以 (ox) 开始 以“ 结尾
这里的第一对括号防止防止转义 所以加了\
然后()表示一个子表达式的开始和结尾 要匹配这两个字符的话 就用上面的\
.表示匹配任意
*表示匹配任意多个
\” 表示匹配最后字符
这里的规则大概就是这样,可以根据需要自己匹配

String rgex = "\\(0x\\)(.*?)\"";
  • 1

2.pattern

pattern是正则表达式的编译形式 匹配的模式
Pattern.compile 是获取Pattern实例,Pattern的构造器是私有的,只能通过compile方法获取

Pattern pattern = Pattern.compile(rgex);
  • 1

matcher类也是私有的,只能通过pattern.matcher来创建,
构造方法传递一个参数时,返回一个matcher实例,是匹配上的字符串
构造方法传递两个参数时,返回一个boolean值,表示是否匹配上指定的字符串

  Matcher m = pattern.matcher(string);
  • 1

m.find() 是部分匹配,
从给定的字符串开始匹配,第一次匹配到之后 如果没有重置,则会从上次匹配到的最后一个字符的下一位开始往后匹配
匹配成功后会返回 true

m.find()
  • 1

m.group() 是返回匹配的数据
group(0) 是返回原始匹配的数据
group(1) 是返回第一次匹配到的数据

m.group(1);
  • 1

代码案例

package fileOperation;import java.io.*;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * @program: solution * @description: 读取文件 利用正则表达式筛选数据 * @author: Wang Hai Xin * @create: 2022-10-24 18:52 **/public class txtFiltration {    public static void main(String[] args) throws IOException {        /**/        FileInputStream file = new FileInputStream("C:\\project\\solution\\src\\main\\java\\fileOperation\\djk-Log 2022-10-21 17_48_06.txt");        /*指定文件类型*/        InputStreamReader isr = new InputStreamReader(file, "UTF-8");        BufferedReader br = new BufferedReader(isr);        /*匹配规则*/        String rgex = "\\(0x\\)(.*?)\"";        String line = null;        while ((line = br.readLine()) != null) {            System.out.println(getPatternCode(line,rgex));        }    }        public static String getPatternCode(String string, String rgex){        // 匹配的模式        Pattern pattern = Pattern.compile(rgex);        Matcher m = pattern.matcher(string);        while (m.find()) {            return m.group(1);        }        return null;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

效果展示,直接将结果从控制台复制使用即可

注意:控制台展示的数目有限,如果出现前半部分丢失, 可能是控制台展示的数据达到上限,可以通过输出到指定文件或者exel文件中

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发