Java字符串替换

时间:2012-10-25 20:07:26

标签: java optimization input

我是java新手,我正在努力学习优化代码以使其生产就绪。我在下面有以下代码。我想知道如何优化它。我想通过使用一小段可能,这将是一个很好的学习方法。

有些观点:
1.该功能将运行多次,需要快速。
2.输入不受约束,因为它可能来自用户或文件。有没有办法解决这个问题,所以不会抛出异常?我正在考虑使用正则表达式 3.还有什么我需要做的才能让生产准备好吗?例如单元测试。如果是这样,最好的方法是什么?
我假设要搜索的字符串不是很长。
5.当我说优化时,我的意思是做一些事情,比如用更快的东西替换“+”运算符,它会影响内存和性能等。

public String strReplave(String originalStr, String oldStr, String newStr) {
    int start = 0;
    while ((start = originalStr.indexOf(oldStr, start)) > 0) {
        originalStr= originalStr.substring(0,start) + newStr+ originalStr.substring(start + oldStr.length());
    start += newStr.length();
}
return originalStr;
}

感谢您的帮助,如果您需要我澄清任何事情,请告诉我。

5 个答案:

答案 0 :(得分:1)

没有什么能超越内置方法input.replace(old,new),因此没有理由真正尝试自己重新实现它。

答案 1 :(得分:0)

两点:

  1. String类中有一个replaceAll和replaceFirst方法(适用于正则表达式),你可能想要使用它。
  2. 在代码中效率非常低的一件事是你用'+'运算符连接字符串。您应该查看StringBuilder类。

答案 2 :(得分:0)

这就是我使用的:

public static String replaceString(String cadena, String word, String newWord) {
    Pattern pat = Pattern.compile(word);   
    Matcher mat = pat.matcher(cadena);  
    return mat.replaceAll(newWord); 
}

你真的不需要知道正则表达式使用它,因为它会匹配文字字符串,例如"a literal string"我不知道它是否是你要求的但是对我来说效果很好。

答案 3 :(得分:0)

除了使用内置函数外,还有我的两分钱。使它显而易见代码的作用。但包括程序可能失败的所有可能条件。

使用try{} catch() {异常处理}

在尝试优化代码之前测量代码以及瓶颈的位置。不要猜。

答案 4 :(得分:0)

public static String replace(String originalStr, String oldStr, String newStr) {
    int p = originalStr.indexOf(oldStr);
    if (p == -1) {
        return originalStr;
    } else {
        StringBuilder result = new StringBuilder();
        result.append(originalStr, 0, p);
        result.append(newStr);
        int q = p + oldStr.length();
        while ((p = originalStr.indexOf(oldStr, q)) != -1) {
            result.append(originalStr, q, p);
            result.append(newStr);
            q = p + oldStr.length();
        }
        result.append(originalStr, q, originalStr.length());
        return result.toString();
    }
}
  • 使用StringBuilder连接字符串。
  • 如果找不到搜索字符串,则进行优化。如果这种情况不会发生,你可以跳过这个。