Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从性能角度替换字符串中的一些字符_Java_String - Fatal编程技术网

Java 从性能角度替换字符串中的一些字符

Java 从性能角度替换字符串中的一些字符,java,string,Java,String,我需要在某些字符串中将所有“\n#”或“\n\r#”替换为“chr(35)”,那么考虑到性能问题,最好的方法是什么 我已经试过了,但我觉得还不够好 public String encodeHash(String data){ StringBuffer result = new StringBuffer(); int numberOfReplacedChars = 0; String hashPattern1 = "\n#" ; String hashPatt

我需要在某些字符串中将所有“\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();   
}
你可以试试

str = str.replaceAll("\n\r?#", "chr(35)");
如果要经常执行此操作,请使用

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

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

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

您是否尝试过任何方法来解决此问题?您遇到了什么样的性能问题?请提供您尝试过的“低性能”方式。@anubhava,我已编辑了我的问题,请查看,谢谢。如果您正在寻找性能:1。使用
StringBuilder
而不是
StringBuffer
。2.使用迭代而不是递归。3.使用更好的索引(添加
beginIndex
变量)而不是创建子字符串。我认为这也是最快的方法。我们的Java教授在课程中说,每次他编写Java中存在的方法时,Java标准实现都比他的更快…@Kingalione是的,对这些方法进行微调的想法多得难以置信。是的,我以前也试过,但不起作用,我的意思是它什么都不替换。@朱巴你想替换文字
\n\r
s还是实际的换行符?@arshajii,关于Patter的事情,创建Patter和Matcher对象2000万次不是很有害吗??