Java 从性能角度替换字符串中的一些字符
我需要在某些字符串中将所有“\n#”或“\n\r#”替换为“chr(35)”,那么考虑到性能问题,最好的方法是什么 我已经试过了,但我觉得还不够好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
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万次不是很有害吗??