-1

我需要在某些字符串中用“chr(35)”替换所有“\n#”或“\n\r#”,那么考虑到性能问题,最好的方法是什么?

我试过这个,但我认为它不够好!

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.

很难说这是否会比两个文字替换更好,所以如果这对你来说真的是一个瓶颈,那么你应该用一些示例字符串来计时两个变体。在大多数情况下,性能差异完全可以忽略不计。这是替代方案:

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

@arshajii 答案是正确的。但您可以尝试的另一种方法是扫描字符串中的每个字符,然后执行 StringBuilder#append。

于 2013-09-25T13:52:46.423 回答