2013-03-06 2 views
1

У меня есть строка, из которой мне нужно опустить определенное слово.Java: опускание слова в строке

Как показано ниже строка может содержать слово «Baci» ИЛИ «Baci» в нем

Я написал программу-пример, показанный ниже, который работает отлично, но я хочу знать, если есть лучший способ сделать Это ??

public class Test { 

     public static void main(String args[]) { 

      String str = "Mar 14 Baci WIC"; 
      if(str!=null&&!str.isEmpty()) 
      { 
       if(str.contains("Baci") || str.contains("BACI")) 
       { 
        str = str.replaceAll("(?i) Baci", ""); 
       } 
      } 

      System.out.println(str); 

     } 

} 
+1

Я бы пошел с '[BACI | Baci]', но я сомневаюсь, что это имеет большое значение. – christopher

+1

Вам не нужна инструкция 'if' и' isEmpty() 'check. Он ничего не заменит, если 'str' не содержит слова. – shuangwhywhy

ответ

1

Я думаю, что лучший способ здесь будет дополнительно не проверить о имеющейся «Baci», то есть без проверки следующих if

if(str.contains("Baci") || str.contains("BACI")) 
+0

почему мое второе условие if \t if (str.contains («Baci») || str.contains («BACI»)) не требуется? – Pawan

+1

Потому что метод replaceAll проверяет это и заменяет все вхождения. Вам еще раз нужно проверить еще –

1

Вы могли бы улучшить его немного с помощью \ б регулярному_выражению (что соответствует "границе слова"):

str = str.replaceAll("(?i) Baci\\b", ""); 

Таким образом, вы код не заменит "мой bacil это ..." с "MYL это ..."

+0

Спасибо за это. – Pawan

1

Ваше второе if условие не является необходимым, так как replaceAll() заменит ноль или более вхождений String без ошибок.

0

вы можете .toUpperCase ваша строка, а затем запрашивать только содержит («BACI»). Внутри блока if, а затем просто замените дважды Baci и BACI.

Думая об этом снова, я думаю, что лучше просто вызвать замену дважды, не спросив, содержит ли ваша строка это или нет. Если он не найдет ничего для замены, он ничего не заменит.

Надеюсь, это было бы полезно!

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