Java 需要 IF 语句吗?

Java IF Statement necessary?

我有:

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 语句,但在某些情况下我可能需要。 如果有更好的方法让我知道。

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

另请注意,您不需要 replaceAll(接受正则表达式):replace 即可。

所以我会选择:

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

IF 语句是不必要的,除非您正在处理 "large" 字符串(我们说的是兆字节或更多)。

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

如果没有 IF 语句,逗号将被替换(如果存在)。如果答案是否定的,您的字符串将保持不变。

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

两者都正确,但第二个更清晰,因为不需要第一个备选方案的 IF 语句。

问题在于在你的字符串世界中,有多少个字符串带有逗号。

如果你有很大的概率,不先检查就调用方法replaceAll。 但是如果你没有使用非常大的字符串,我想你会发现性能没有任何差异。

只是另一个时间复杂度为 O(n) 的解决方案,space 复杂度为 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();
}