0

ループ内の文字列を「短縮」してから、を何度も渡す必要がありますjava.regex.Pattern。構文解析とテキスト処理に深く関わっている人にとっては、おそらく些細な状況です。

私は私が使用しなければならない状況に直面しています:

string=string.substring(shortenHowMuch); //Need to shorten it from the beginning

...低レベルの開発者はよく知っています。つまり、文字列全体をメモリの別のアドレスにコピーします。HotSpotの最適化が実施されていても(私が知っていることですが)、コードがすべての可能なJavaVMで可能な限り最大のパフォーマンスバリアントで実行されることを確認する必要があります。

編集: 後で、文字列をコピーしているという上記の私のステートメントが間違っていることがわかりました。だから私の質問は「地獄に」行くべきです:)とにかく、あなたが好きなら読んでください:).substringコピーしませんが、代わりにchar[]、非常に興味深い:)への参照を共有します

4

2 に答える 2

3

StringBuilderを使用したときに何が起こったのか正確に説明していなかったので、理由を答えることができません。ただし、String.substringは最適化されており、内部のchar配列をコピーしないため、実際にはStringBuilderは必要ありません。これは内部で起こることです

public String substring(int beginIndex, int endIndex) {
        ..... 
        return ((beginIndex == 0) && (endIndex == count)) ? this :
            new String(offset + beginIndex, endIndex - beginIndex, value);
 }

// Package private constructor which shares value array for speed.
String(int offset, int count, char value[]) {
    this.value = value;
    this.offset = offset;
    this.count = count;
}
于 2012-12-22T13:59:08.913 に答える
0

コードを見ずに言うのは難しいですが、代わりにパターンをより一般的にすることができますか?「。*original-pattern」のようなものですか?

于 2012-12-22T13:51:00.657 に答える