2016-01-05 4 views
0

у меня есть:Требуется заявление Java IF?

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 но может быть случай, когда я делаю. Если есть лучший способ, дайте мне знать.

+0

Ну, вы рассмотрели, что может произойти, если вы оставить из 'if' заявление? – Kayaman

+6

Не используйте ['replaceAll'] (http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#replaceAll-java.lang.String-java.lang.String -), если вы не используете регулярные выражения. Используйте ['replace'] (http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#replace-java.lang.CharSequence-java.lang.CharSequence-). – khelwood

ответ

10

Оба функционально эквивалентны, но первый более подробный и, вероятно, будет медленнее, поскольку он выполняет дополнительную операцию.

Также обратите внимание, что вам не нужен replaceAll (который принимает регулярное выражение): replace будет делать.

Так что я хотел бы пойти на:

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

Оператор IF не является необходимым, если вы не обработки «больших» строки (мы говорим мегабайта или больше).

Если вы используете оператор IF, ваш код сначала будет искать первое заполнение запятой, а затем выполнить замену. Это может быть дорогостоящим, если запятая находится ближе к концу строки, а ваша строка большая, так как ее нужно будет пройти дважды.

Без оператора IF запятые будут заменены, если они существуют. Если ответ отрицательный, ваша строка будет не затронута.

Нижнее правило: используйте версию без утверждения IF.

1

Оба являются правильными, но второй является более чистым, поскольку утверждение IF первого варианта не требуется.

1

Это вопрос о том, какая вероятность иметь строки с запятой в вашей вселенной строк.

Если у вас есть высокая вероятность, вызовите метод replaceAll, не проверив сначала. НО Если вы не используете чрезвычайно огромные строки, я думаю, вы не увидите никакой разницы в производительности.

1

Просто еще одно решение с временной сложностью O (п), космической сложности 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(); 
} 
+0

Предложения: используйте 'StringBuilder' вместо' StringBuffer', lazy-initialize it (чтобы вы могли просто вернуть 'str', если он не содержал никаких', '), и передать' length' его конструктору, чтобы предотвратить изменение размера , –

Смежные вопросы