Java 根据一组记录验证文件

Java 根据一组记录验证文件,java,regex,Java,Regex,我有一个包含多组记录的文件 示例中的多组记录如下所示 X---Header K L M Z---Footer X---Header K L M Z---Footer K、 L和M是信息记录 当我在一个文件中只有一组指令时,我像这样验证它们 X---Header K L M Z---Footer X---Header K L M Z---Footer 首先读取记录数,然后逐个验证它们 if recordsno = 1 input.record.match(^[X].*$) else

我有一个包含多组记录的文件

示例中的多组记录如下所示

X---Header
K
L
M
Z---Footer
X---Header
K
L
M
Z---Footer
K、 L和M是信息记录

当我在一个文件中只有一组指令时,我像这样验证它们

X---Header
K
L
M
Z---Footer
X---Header
K
L
M
Z---Footer
首先读取记录数,然后逐个验证它们

if recordsno = 1

   input.record.match(^[X].*$)

else if recordno = 2

   input.record.match(^[Z].*$)

else

   input.record.match(^[K|L|M].*$)
如果有任何记录不匹配,我将拒绝该记录。单套指令运行良好。我正在使用java在etl中执行此活动

但现在我希望有多套说明。那么在这种情况下,我们如何验证这一点呢。任何建议,请让我可以添加更多的代码到我现有的验证这种多套指令

必需的是..页眉应该从X开始,页脚应该从Z开始,记录之间只能有K、L或M。因此,如果有任何记录与此格式不匹配,我将拒绝该文件

有什么建议吗


谢谢

基于您在问题中提出的一般要求,我认为您应该使用本网站上提到的Java库之一,而不是尝试使用正则表达式来解决此问题

有一些真正优秀的Java库可以满足您的需求

这可能不是对你问题的直接回答,但那是因为这个问题(对我来说)在实际需要解决/完成的问题上过于宽泛

只需看一下BeanIO、FlatWorm、JsaPar、EasyBatch、JFFP等的文档

为了获得对您的问题的更多反应(或更好的反应),请尝试详细描述记录中包含的内容以及如何检测它们(是什么使它们具有独特性?)。您可以通过指定希望(或必须,基于需求)如何解决问题来改进您的问题:是否允许使用外部库?是否必须只使用正则表达式?是否有任何速度/内存使用要求等

我认为用户Wiktor Stribiżew给出的答案是正确的:“我所能分享的只是一个提示,当你有这么多需求时,你不应该依赖单一的正则表达式。”。我只能承认这一点


祝你好运

什么是记录?这是一个记录计数。像第一条记录、第二条记录等等,一条记录可以是空的吗?
K
L
M
是否可以重复,或者只能出现一次?他们可以按任何顺序来吗?他们可以重复。这不是问题,但应该只从K、L或M开始。如果除此之外,我根据不正确的记录拒绝整个文件sok,如果您可以验证整个文件内容,您可以使用regex。我不确定这是否适用于ETL。下一次,在发布答案之前,请先尝试使用注释澄清问题。答案包含解决方案方向和对主题启动者的一些建议。正如用户Wiktor Stribiżew已经总结的那样,这个问题太广泛,无法作为有效的解决方案直接回答。我认为最好提供一些文档指针,让TS能够找到详细的解决方案,解决或澄清TS想要解决的问题。这句话没什么错,你说得对。我的意思是,如果问题太广泛,最好让提问者缩小范围,这样你就可以提供一个更清晰的答案。否则,回答错误的问题会有完全失分的风险。只是给新用户一些有用的建议。这是真的,但是当TS缩小了他/她的答案时,我可以随时编辑我的答案。但在TS能够做到这一点之前,我可以提供一个答案,为他/她指出一个方向,用另一种TS最初没有想到的方法来解决这个问题。在这种情况下,调整问题和答案可能更好。谢谢你的建议。