0

我是 Java 新手,我正在尝试学习优化代码以使其为生产做好准备。我在下面有以下代码。我想知道如何优化它。我认为通过使用一小段可能,这将是一个很好的学习方式。

几点:
1.该功能将运行多次,它需要快速。
2. 输入不受约束,因为它可能来自用户或文件。有没有办法解决这个问题,所以不会抛出异常?我正在考虑使用正则表达式。
3. 我还需要做些什么来准备生产吗?例如单元测试。如果是这样,最好的方法是什么?
4. 我假设要搜索的字符串不是很长。
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;
}

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

4

5 回答 5

1

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

于 2012-10-25T20:09:58.213 回答
0

两点:

  1. String 类中有一个 replaceAll 和一个 replaceFirst 方法(与正则表达式一起使用),您可能想要使用它。
  2. 在您的代码中效率非常低的一件事是您使用“+”运算符连接字符串。您应该查看 StringBuilder 类。
于 2012-10-25T20:11:15.620 回答
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"我不知道它是否是你所要求的,但对我来说效果很好。

于 2012-10-25T20:12:18.693 回答
0

除了使用内置函数之外,只有我的两分钱。让代码的作用一目了然。然而,包括您的程序可能失败的所有可能条件。

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

在尝试优化代码之前测量你的代码和瓶颈在哪里。不要猜测。

于 2012-10-25T20:12:42.110 回答
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连接字符串。
  • 如果未找到搜索字符串,则进行优化。如果这种情况不经常发生,你可以跳过这个。
于 2012-10-25T20:16:12.057 回答