2014-02-28 6 views
1

문자열에서 일치하는 단어를 바꾸려면 java replaceAll() 메소드를 사용하고 있습니다. 필자의 경우이 단어가 쉼표 (,)의 전체 줄임말 (.) 또는 다른 단어 옆에 있으면이 단어가 대체되지 않습니다.자바의 모든 단어 바꾸기

예 : 및. 및 및; 과 (

이 코드입니다 :

body = body.replaceAll("(?i) "+knownWord + " ", replaceWord); 

누구도 날이 문자열에있는 모든 단어를 식별 할 수있는 정규 표현식을 제안 해주십시오 수

+1

HTTP와 마찬가지로, 당신의 패턴 객체에 CASE_INSENSITIVE 플래그를 통과 : // WWW. regular-expressions.info/wordboundaries.html – Joel

답변

1

을 특정 를 일치 시키려면? knownWord는 수행

body = body.replaceAll("(?i)\\b"+knownWord + "\\b", replaceWord); 

내가 당신을 위해 무엇을 찾고 있던 것은,998 생각(단어 경계)는 단어의 시작/끝을 감지하는 데 사용되므로 쉼표 또는 점이 더 이상 문제가되지 않습니다.

String body = "I'm going to school. "; 
String knownWord = "school"; 
String replaceWord = "shop"; 
System.out.println(body.replaceAll("(?i)\\b"+knownWord + "\\b", replaceWord)); 

위 다음을 인쇄 할 것이다 : 나는 쇼핑을 갈거야

귀하의 코멘트에 응답 자세한 예

더.

+0

@Asanka가 당신을 위해이 작업을 수행 했습니까? – donfuxx

+0

이 솔루션을 제공해 주셔서 감사합니다. 지금이 작업을 시도하고 있습니다. 결과를 알려 드리겠습니다. –

+0

@Asanka 확실 ;-) 끝나면 도움이되는지 또는 도움이 더 필요하면 알려주세요. – donfuxx

2

이 지정할 않는 :

(?<![.,])\b(\w+)\b(?![.,]) 

Regular expression visualization

Debuggex Demo

그것은 발견 (그리고 캡처) 단어만큼 그들은하지 다음에 쉼표 나 마침표에 있습니다로. 문자 클래스에 원하는 문장 부호 (예 : [.,?(]) 만 추가하면됩니다.

다음은 정규식 자바 문자열을 이스케이프 :

"(?<![.,])\\b(\\w+)\\b(?![.,])"는 지금까지 사건을 무시로, 바로 그러한

Pattern p = Pattern.compile(theAbovePattern, Pattern.CASE_INSENSITIVE); 
+0

+1하지만 @Asanka는 실제로 단어를 대체하려고한다. '., ' – donfuxx

+0

예. 나는 그가 반대를 의미한다고 생각 : 그는 * 구두점 옆에 단어를 캡처하는 방법을 알아낼 수 없습니다 :) – aliteralmind

+0

@aliteralmind 당신이 작성한 그 정규 표현식 으로이 코드를 바꾸시겠습니까? 본문 = body.replaceAll ("(? i)"+ 알려진 단어 + "", replaceWord); 대소 문자를 구분하지 않기 때문에. –