0

私はJavaを初めて使用し、コードを最適化して本番環境に対応できるようにする方法を学ぼうとしています。以下のコードがあります。どうすれば最適化できるのか知りたいのですが、小さなスニペットを使って学ぶのもいいと思いました。

いくつかのポイント:
1。関数は何度も実行されるため、高速である必要があります。
2.入力は、ユーザーまたはファイルからのものである可能性があるため、制約はありません。例外がスローされないようにこれに対処する方法はありますか?正規表現を使うことを考えていました。
3.本番環境に対応するために他に必要なことはありますか?例:ユニットテスト。もしそうなら、これを行うための最良の方法は何でしょうか?
4.検索する文字列はそれほど長くないと思います。
5.最適化とは、「+」演算子をより高速なものに置き換えるなどのことを意味します。これは、メモリやパフォーマンスなどに影響を与える可能性があります。

public String strReplave(String originalStr, String oldStr, String newStr) {
    int start = 0;
    while ((start = originalStr.indexOf(oldStr, start)) > 0) {
        originalStr= originalStr.substring(0,start) + newStr+ originalStr.substring(start + oldStr.length());
    start += newStr.length();
}
return originalStr;
}

あなたの助けに感謝します、そしてあなたが私に何かを明確にする必要があるならば、私に知らせてください。

4

5 に答える 5

1

組み込みのメソッドに勝るものinput.replace(old,new)はないので、自分で再実装しようとする理由はありません。

于 2012-10-25T20:09:58.213 に答える
0

2つのポイント:

  1. Stringクラス(正規表現で機能する)にはreplaceAllメソッドとreplaceFirstメソッドがあり、おそらくそれを使用する必要があります。
  2. コードで非常に非効率的なことの1つは、文字列を「+」演算子で連結するという事実です。StringBuilderクラスを調べる必要があります。
于 2012-10-25T20:11:15.620 に答える
0

これは私が使用するものです:

public static String replaceString(String cadena, String word, String newWord) {
    Pattern pat = Pattern.compile(word);   
    Matcher mat = pat.matcher(cadena);  
    return mat.replaceAll(newWord); 
}

"a literal string"それがあなたが求めていたものであるかどうかはわかりませんが、私にとってはかなりうまく機能するように、リテラル文字列と一致するため、正規表現を使用するために実際に知る必要はありません。

于 2012-10-25T20:12:18.693 に答える
0

組み込み関数を使用する以外に、ちょうど2セントです。コードの機能を明確にします。ただし、プログラムが失敗する可能性のあるすべての条件を含めてください。

try{} catch(){例外処理}を使用する

コードを最適化する前に、コードとボトルネックの場所を測定してください。推測しないでください。

于 2012-10-25T20:12:42.110 に答える
0
public static String replace(String originalStr, String oldStr, String newStr) {
    int p = originalStr.indexOf(oldStr);
    if (p == -1) {
        return originalStr;
    } else {
        StringBuilder result = new StringBuilder();
        result.append(originalStr, 0, p);
        result.append(newStr);
        int q = p + oldStr.length();
        while ((p = originalStr.indexOf(oldStr, q)) != -1) {
            result.append(originalStr, q, p);
            result.append(newStr);
            q = p + oldStr.length();
        }
        result.append(originalStr, q, originalStr.length());
        return result.toString();
    }
}
  • StringBuilder文字列を連結するために使用します。
  • 検索文字列が見つからない場合の最適化。これが頻繁に起こらない場合は、これをスキップできます。
于 2012-10-25T20:16:12.057 に答える