0

私は現在、質問に答えてJavaで簡単なプログラムを書いています。質問は言う:

ドキュメント (文字列として表される) が適切な xml に変換されないバグを修正しています。この問題は、次のいずれかの理由で発生する可能性があります:
A. 特定の文字が xml で失敗する、または
B. 渡されたドキュメントの長さが 100 文字を超えている (ドキュメントが小さい)

次に、エスケープが必要な 5 文字を一覧表示します (たとえば、'">'" をエスケープ シーケンスに置き換えます)。

特殊文字をエスケープに置き換えるようにコーディングしましたが、長さについてどうすればよいかわかりません。

if (length of string > 100) {
    do what?
}

おそらくtry catchステートメントを実装することを考えていましたが、それはランタイム例外に使用されていますか? (ヌルポインタなど)。設計上の観点から、このバグを回避しながら関数の仕事を完了する最善の方法は何でしょうか?

4

4 に答える 4

3

ここでは例外を処理していませんが、おそらく例外をスローする必要があります。

private static final int MAX_LENGTH = 100;
// ...

if (inputString.length() > MAX_LENGTH) {
  throw new IllegalArgumentException(
      String.format("String is too large. Found %d characters, maximum is %d.",
          inputString.length(), MAX_LENGTH));
}

これは、API に違反していることをメソッドのユーザーに通知する一般的な方法です。メソッドのドキュメントで、String が 100 文字を超えることはできないと指定されていることを確認してください。

于 2013-04-25T10:55:15.780 に答える
1

何か例外的なことが発生した場合、例外が発生するはずです。ビジネス ロジックを制御するために例外を使用してコードを記述しないでください (特に、それが NoEntityFound のようなサード パーティの例外である場合、スローされるサード パーティの例外に関するルールが変更された場合はどうなるでしょうか?)。

長さが本当に停止してユーザーに伝える必要がある場合は、次のようなカスタム例外をスローします...

throw new IllegalStringLength("String length invalid");

ただし、これが例外をスローせずに実行でき、より適切に処理できる場合は、一般的にそうする方が良いと言えます。ヌル ポインターやデータベースが接続できなかったようなものではありません。

次に、上記の例外をキャッチしてユーザーに出力する必要があります (ここでも例外を使用してアプリケーション フローを制御します)。

于 2013-04-25T10:58:10.790 に答える
1

私が正しく理解している場合、関数は長さが 100 未満の文字列を XML に変換します。したがって、設計の観点からは、指定された文字列の長さが >= 100 の場合に IllegalArgumentException をスローしても問題はないと思います。

実行を継続しようとしないでください。例外が関数の実行を停止するのには理由があります。これは、関数の契約に適合する正しい結果を保証するためです。

于 2013-04-25T10:58:29.653 に答える
0

独自の例外クラスを作成します:

public class FileTooLongForXmlException extends Exception{
    public FileTooLongForXmlException() {
        super("Your file is > 100 carac");
    }
}

そして、あなたはただ行う:

if (length of string > 100) {
    throw new FileTooLongForXmlException();
}
于 2013-04-25T10:58:06.073 に答える