Java IF声明是否必要?

时间:2016-01-05 15:59:13

标签: java logic

我有:

String str = "Hello, how, are, you";

我想创建一个帮助方法,从任何字符串中删除逗号。 以下哪项更准确?

private static String removeComma(String str){
    if(str.contains(",")){
        str = str.replaceAll(",","");
    }
    return str;
}  

private static String removeComma(String str){
    str = str.replaceAll(",","");
    return str;    
}  

似乎我不需要IF语句,但可能有我这样做的情况。 如果有更好的方式让我知道。

5 个答案:

答案 0 :(得分:10)

两者在功能上都是等效的,但前者更冗长,并且可能会更慢,因为它会运行额外的操作。

另请注意,您不需要replaceAll(接受正则表达式):replace会这样做。

所以我会选择:

private static String removeComma(String str){
    return str.replace(",", "");
}  

答案 1 :(得分:1)

除非您正在处理"字符串(我们说的是兆字节或更多)。

如果您正在使用IF语句,您的代码将首先搜索逗号的第一次出现,然后执行替换。如果逗号靠近字符串的末尾并且字符串很大,这可能会很昂贵,因为它必须遍历两次。

如果没有IF语句,将替换逗号(如果存在)。如果答案是否定的,那么你的字符串将不受影响。

底部规则:使用没有IF语句的版本。

答案 2 :(得分:1)

两者都是正确的,但第二个是更清洁的,因为不需要第一个替代方案的IF语句。

答案 3 :(得分:1)

这是在你的字符串世界中使用逗号字符串的概率是多少。

如果您的概率很高,请先调用方法replaceAll而不先检查。 但如果你没有使用极其庞大的字符串,我想你会发现性能没有差别。

答案 4 :(得分:1)

另一个时间复杂度为O(n),空间复杂度为O(n)的解决方案:

public static String removeComma(String str){
    int length = str.length();
    StringBuffer sb = new StringBuffer();

    for (int i = 0; i < length; i++) {
        char c = str.charAt(i);
        if (c != ',') {
            sb.append(c);
        }
    }
    return sb.toString();
}