2013-03-06 2 views
1

나는 특정 단어를 생략 할 필요가있는 String을 가지고있다.자바 : 문자열에서 단어 생략하기

내가 잘 작동하는 아래에 표시된 샘플 프로그램을 작성했습니다 그것에서 단어 "바치"OR "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() 체크가 필요 없습니다. 'str'에 단어가 없으면 아무것도 대체하지 않습니다. – shuangwhywhy

답변

1

나는 더 좋은 방법이 여기 없어 추가로 다음 if 체크하지 않고, 즉 '바치'의 실존을 확인하는 것입니다 생각

if(str.contains("Baci") || str.contains("BACI")) 
당신은 약간의 \ B의 정규 표현식을 사용하여 향상시킬 수
+0

왜 내 두 번째 조건이 \t 인 경우 (str.contains ("Baci") || str.contains ("BACI"))가 필요하지 않습니까? – Pawan

+1

replaceAll 메서드가이를 확인하고 모든 occurences를 바꿉니다. 한번 더 검사 할 필요가 없습니다 –

1

(이는 "단어 경계"일치) :

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

그런 식으로, 당신은 코드 "내 bacil은 ..."대체하지 않습니다와 함께 "myl은 ..."

+0

감사합니다. – Pawan

1

두 번째 if 조건은 불필요합니다. replaceAll()은 오류없이 String 번을 0 번 이상 바꿉니다.

0

당신은 .toUppercase 귀하의 문자열을 누른 다음 포함 ("BACI")에만 요청할 수 있습니다. if 블록 내부에서 Baci와 BACI로 두 번 바꾸기 만하면됩니다.

다시 생각해 보면, String에 포함되어 있는지 묻지 않고 replace를 두 번 호출하는 것이 좋습니다. 대체 할 항목을 찾지 못하면 아무 것도 대체하지 않습니다.

희망이 있으면 유용 할 것입니다.