-2

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

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

我已经写了一个 prasing 代码,其工作原理如下:

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

    }


}
4

1 回答 1

1

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

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

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

编写单元测试以检查您的方法是否使用所有可能的输入来完成它们应该做的事情。

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

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

边注:

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

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

于 2012-07-22T10:03:56.730 回答