使用java解析文本文件,每行要提取多个值

问题描述 投票:1回答:3

我不会撒谎,我真的不好做正则表达式。我目前正在尝试解析一个文本文件,这给了我很多问题。目的是提取它们各自的“标签/标题”之间的数据。所讨论的文件的布局如下个人信息替换为“数据”

<STMTTRN><TRNTYPE>POS</TRNTYPE><DTPOSTED>20190717071500</DTPOSTED><TRNAMT>-5.81</TRNAMT><FITID>3893120190717WO</FITID><NAME>DATA</NAME><MEMO>POS Withdrawal</MEMO></STMTTRN>

<STMTTRN><TRNTYPE>DIRECTDEBIT</TRNTYPE><DTPOSTED>20190717085000</DTPOSTED><TRNAMT>-728.11</TRNAMT><FITID>4649920190717WE</FITID><NAME>CHASE CREDIT CRD</NAME><MEMO>DATA</MEMO></STMTTRN>

<STMTTRN><TRNTYPE>ATM</TRNTYPE><DTPOSTED>20190717160900</DTPOSTED><TRNAMT>-201.99</TRNAMT><FITID>6674020190717WA</FITID><NAME>DATA</NAME><MEMO>ATM Withdrawal</MEMO></STMTTRN>

我希望能够以如下所示的多维数组结尾,以便可以将数组的每一行轻松添加到数据库中:Example Parse

java arrays xml parsing xml-parsing
3个回答
0
投票

鉴于这是XML,我将做两件事之一:

  • 使用Java DOM对象与Java对象(节点和元素)进行编组/拆组,或
  • 使用JAXB可以实现类似的功能,但是具有更好的POJO表示。

Mkyong有两个教程。尝试dom parsingjaxb。他的教程简单易懂。

JAXB需要更多的工作和依赖性。因此,请首先尝试DOM。


0
投票

正如David已经回答的那样,最好使用Java解析POS输出XML。如果您对正则表达式更感兴趣以获取所有信息,则可以使用此正则表达式。

<[^>]+>|\\n+

您可以在以下站点中进行测试。

https://rubular.com/https://www.regextester.com/


0
投票

我将提出以下方法。

逐行读取文件和文件:

final List<String> lines = Files.readAllLines(Paths.get("/path/to/file"));

此时,您将所有文件行分开,并准备将字符串行转换为更有用的文件。但是您应该事先创建类。

为您的数据创建一个类,类似于:

public class STMTTRN {
   private String TRNTYPE;
   private String DTPOSTED;
   ...
   ...
   //constructors
   //getters and setters
}

现在,当您在每个单独的字符串中都有一个数据,并拥有一个用于保存数据的类时,可以使用Jackson将行转换为对象:

final XmlMapper xmlMapper = new XmlMapper();
final STMTTRN stmttrn = xmlMapper.readValue(lines[0], STMTTRN.class);

您可能想创建一个循环或使用带有映射器和收集器的流来获取STMTTRN对象的列表:

final List<STMTTRN> stmttrnData = lines.stream().map(this::mapLine).collect(Collectors.toList());

映射器可能在哪里:

private STMTTRN mapLine(final String line) {
    final XmlMapper xmlMapper = new XmlMapper();

    try {
        return xmlMapper.readValue(line, STMTTRN.class);

    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.