1

皆さんこんにちは、メモリ使用率とプロセスに必要な時間についてお聞きしたいです。私はこれらの次のコードを持っています。より高速になるようにコードを最適化したい。文字列はより多くのメモリを必要としますか?

public String replaceSingleToWord(String strFileText) {

    strFileText = strFileText.replaceAll("\\b(\\d+)[ ]?'[ ]?(\\d+)\"", "$1 feet $2  ");
    strFileText = strFileText.replaceAll("\\b(\\d+)[ ]?'[ ]?(\\d+)''", "$1 feet $2     inch");

    //for 23o34'
    strFileText = strFileText.replaceAll("(\\d+)[ ]?(degree)+[ ]?(\\d+)'", "$1 degree $3 second");

    strFileText = strFileText.replaceAll("(\\d+((,|.)\\d+)?)sq", " $1 sq");

    strFileText = strFileText.replaceAll("(?i)(sq. Km.)", " sqkm");
    strFileText = strFileText.replaceAll("(?i)(sq.[ ]?k.m.)", " sqkm");
    strFileText = strFileText.replaceAll("(?i)\\s(lb.)", " pound");
    //for pound
    strFileText = strFileText.replaceAll("(?i)\\s(am|is|are|was|were)\\s?:", "$1 ");
    return strFileText;
}

複雑さを軽減したいだけで、より多くのメモリと時間がかかると思います。必要な変更を処理するための時間とメモリを減らしたいだけです。replaceAll関数の代替手段はありますか? このコードをどのように最小化しますか? メモリ使用率が低く、高速になるようにするには?よろしくお願いします

4

4 に答える 4

1

StringBuffer クラスと StringBuilder クラスは、文字列に多くの変更を加える必要がある場合に使用されます。

タイプ StringBuffer および Stringbuilder の Strings オブジェクトとは異なり、多くの新しい未使用のオブジェクトを残すことなく、何度でも変更できます。

StringBuilder クラスは Java 5 で導入されました。StringBuffer と StringBuilder の主な違いは、StringBuilders メソッドがスレッドセーフではない (同期されていない) ことです。

StringBuffer よりも高速であるため、可能な限り StringBuilder を使用することをお勧めします。ただし、スレッド セーフが必要な場合、最善のオプションは StringBuffer オブジェクトです。

public class Test{

    public static void main(String args[]){
       StringBuffer sBuffer = new StringBuffer(" test");
       sBuffer.append(" String Buffer");
       System.ou.println(sBuffer);  
   }
}




public class StringBuilderDemo {
    public static void main(String[] args) {
        String palindrome = "Dot saw I was Tod";

        StringBuilder sb = new StringBuilder(palindrome);

        sb.reverse();  // reverse it

        System.out.println(sb);
    }
}

必要に応じて、いずれかを選択します。

参照http://docs.oracle.com/javase/tutorial/java/data/buffers.html

于 2013-10-14T12:32:26.333 に答える
0

[,.]正規表現パターンは、spot_または?(代わりに)で改善できます[ ]?

Pattern関数の外でコンパイルされた static final を使用します。

private static final Pattern PAT = Pattern.compile("...");


StringBuffer sb = new StringBuffer();
Matcher m = PAT.matcher(strFileText);
while (m.find()) {
    m.appendReplacement(sb, "...");
}
m.appendTail(sb);
strFileText = sb.toString();

if (m.find)を行う前に最初のテストで最適化できnew StringBufferます。

于 2013-10-14T12:35:14.550 に答える