-1

一部の文字列ですべての「\n#」または「\n\r#」を「chr(35)」に置き換える必要があるため、パフォーマンスの問題を考慮してこれを行う最善の方法は何ですか?

私はこれを試しましたが、十分ではないと思います!!!

public String encodeHash(String data){

    StringBuffer result = new StringBuffer();

    int numberOfReplacedChars = 0;

    String hashPattern1 = "\n#" ;
    String hashPattern2 = "\n\r#" ;

    int index = data.indexOf(hashPattern1);

    if(index != -1 ){
        numberOfReplacedChars = hashPattern1.length();
    }else{
        index = data.indexOf(hashPattern2);
        if(index != -1){
            numberOfReplacedChars = hashPattern2.length() ;
        }else{
            return data;
        }
    }

    result.append(data.substring(0,index + (numberOfReplacedChars - 1)));
    result.append("chr(35)");
    // method call itself (recursive)
    result.append(encodeHash(data.substring(index + numberOfReplacedChars)));

    return result.toString();   
}
4

2 に答える 2

2

あなたが試すことができます

str = str.replaceAll("\n\r?#", "chr(35)");

この操作を頻繁に行う場合は、Pattern.

これが 2 つのリテラル置換よりも優れているかどうかを判断するのは難しいため、これが本当にボトルネックである場合は、サンプル文字列で両方のバリアントの時間を計る必要があります。ほとんどのコンテキストでは、パフォーマンスの違いはまったく無視できます。代替案は次のとおりです。

str = str.replace("\n#", "chr(35)").replace("\n\r#", "chr(35)");
于 2013-09-25T13:43:49.823 に答える