-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()私が期待する長さの配列を返しません。このケースを正しく処理する
  • ...

大きなメソッドをいくつかのサブメソッドに分割し、それぞれが 1 つのことだけを行うようにします。

単体テストを作成して、可能なすべての入力を使用して、メソッドが想定どおりに機能することを確認します。

「物事を正しく処理する」ということは、ログが明確に定義された形式に従うという契約である場合、入力が正しくないために例外をスローすることを意味する可能性があることに注意してください。この場合、間違っているのはログを生成するコードです。ただし、あいまいな NullPointerException や ArrayIndexOutOfBoundsException よりも、予期した形式と代わりに取得した形式を示す例外を用意することをお勧めします。

上記は、ファイルの解析だけでなく、作成するあらゆる種類のコードに適用されます。

サイドノート:

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

10要素の配列を作成してすぐに破棄し、別の配列(によって返されるものlog.split(" - "))に置き換えるポイントは何ですか。

于 2012-07-22T10:03:56.730 に答える