我正在执行一项解析日志文件的任务。在 Java 中解析以下日志字符串的最佳方法是什么?
EMPLOYER : NAME : Company ID : 23 TYPE : Academy
FOUNDED : 2012-01-05 11:01:18.658 CATEGORY : College
EMPLOYEE : NAME : John TIN : 123456
GENDER : Male STATUS : Prob
COMMENT : Data sent to 192.168.0.1:8088
USER DATA : Any string.
我特别关心关键字“Employer”和“Employee”(我不需要)以及出现在“Founded”和“Comment”字段中的冒号(如果万一我会使用冒号作为分隔符)。
谢谢!
最佳答案
对于这样的事情没有任何最好的方法。它显然是一种临时格式,没有系统的元结构(例如与 XML 对比......)
您可以尝试正则表达式,但我担心它们会变得太复杂。
您可以使用解析器生成器,但这可能超出您当前的能力。 (否则你自己就会想到这一点。)
相反,我建议使用 Java 的 Scanner
类来实现解析器。上下文敏感分隔符的问题可以通过根据您接下来的期望更改分隔符正则表达式来解决,或者使用 Scanner.nextLine()
获取其余的内容与分隔符无关的行。
此类问题的问题之一是您没有明确定义的格式。相反,您刚刚向我们展示了一个简单的示例。此示例可能是典型,但它不处理边缘情况。 (您已经确定了至少其中一个。)这也增加了一种可能性,即如果不将“业务知识”嵌入到解析器中,就不可能解析日志文件条目。例如日期将始终采用某种格式,或者公司名称从不包含冒号。如果您实际上不知道这些规则是什么(例如,因为它们没有在任何地方正确指定),那么您的解析器将很脆弱。
关于java - 在 Java 中解析以下日志条目的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8920414/