【问题标题】:Good Practices in parsing text files in JavaJava 中解析文本文件的良好实践
【发布时间】:2012-07-20 21:20:01
【问题描述】:

我想解析一个代表日志的文本文件。我希望它足够强大,可以处理所有可能发生的错误。虽然我对最佳实践和我应该解释的错误一无所知。我将使用 JAVA 来实现这一点。

示例日志: 2012-07-16 10:23:40,558 - 127.0.0.1 - 参数数组 [param1=1,param2=1,param3=0,] - 383

我已经写了一个如下代码:

public Parser(String log) {
    this.log = log;
    this.parse();

}

public void parse() {

    String[] temp = new String[10];
    String[] temp2 = new String[10];

    temp = log.split(" - ");
    key = temp[3];
    id = Integer.parseInt(key);
    String IP = temp[1];
    String str;

    String temp3 = temp[2].substring(temp[2].indexOf("g"), temp[2].indexOf("]"));
    temp = temp3.split(",");
    str = "param1";

    boolean ordered = CheckOrder(temp);


    if (ordered) {
        for (int q = 0; q < temp.length; q++) {

            temp[q] = temp[q].substring(temp[q].indexOf("=") + 1);

        }



        if (temp[0].equals("q")) {
            param= 0;
        } else if (temp[0].equals("k")) {
            param= 1;
        } else {
            param= 2;
        }

         // Same way for all parameters

    }


}

【问题讨论】:

  • 如果您向我们提供要解析的文件样本以及您实际期望的内容(这是程序所做的,但如果我们无法比较我们无法发现可能的错误),这将有所帮助)
  • 你解析了哪个文件,得到了什么结果?
  • 解析成功,我添加了一个示例日志,我要求的是,您建议考虑哪些错误情况以使代码健壮

标签: java parsing exception logging error-handling


【解决方案1】:

检查您使用的所有方法的 javadoc,并确保处理所有名义和异常情况:

  • 文件不存在:抛出异常。正确处理此异常
  • String.indexOf() 找不到它要查找的内容。它返回-1。正确处理此案
  • String.split() 没有返回我期望的长度的数组。正确处理此案
  • ...

将你的大方法分成几个子方法,每个子方法只做一件事。

编写单元测试以检查您的方法是否按照所有可能的输入完成了他们应该做的事情。

请注意,“正确处理事情”很可能意味着:如果合同规定日志遵循明确定义的格式,则因为输入不正确而引发异常。在这种情况下,生成日志的代码不正确。但是最好有一个异常来告诉您期望哪种格式以及您得到哪种格式,而不是模糊的 NullPointerException 或 ArrayIndexOutOfBoundsException。

以上适用于您编写的任何类型的代码,而不仅仅是文件解析。

旁注:

String[] temp = new String[10];
temp = log.split(" - ");

创建一个包含 10 个元素的数组以在之后立即丢弃它并用另一个数组替换它(log.split(" - ") 返回的那个)有什么意义。

【讨论】:

    猜你喜欢
    • 2012-10-21
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多