2012-11-18 4 views
1

경우에 따라 내 문자열에서 단어/단어를 제거해야합니다. 예 : 내 문자열은 incabcincdefinc inc. inc입니다. 이를 위해 inc.inc을 모두 제거해야합니다. 즉, 출력은 incabcincdefinc이어야합니다. 즉, 다음과 같은 조건에 따라 모든 inc의 제거 : 대괄호는 사이에 공백 문자를 만드는 데 사용되는외모에 따라 문자열에서 단어 제거

str = str.replaceAll("[ ](?:inc|ltd|corp)\\b\\.?", ""); 

:

<space>inc<space> 
<space>inc<.> 
<space>inc<end string> 
<space>inc 
+1

[당신이 시도 무엇?] (http://whathaveyoutried.com) : 당신이 확장 찾고 싶을 경우

은 대문자와 소문자를 구별하지 않고, 당신은 더 이상 구문을 사용합니다 힌트, 당신은 구분 기호가 무엇인지 알기 때문에 대신에'split '할 수있을 때 정규식이 필요하지 않습니다. –

+0

'inc'는 예제입니다. 사실 나는 회사 이름에서 inc, ltd, corp 등의 비즈니스 엔티티 확장을 제거해야합니다. – NaaN

+0

다시 말하지만,'split', 결과 배열을 반복하고, 당신의 삶과 함께 움직이십시오. –

답변

2

당신은 아마 이런 식으로 뭔가 멀리 얻을 수 있습니다 더 눈에 잘 띄면 공간이 유지되는 한 생략 할 수 있습니다. 귀하의 조건은 사업체 확장 후에 단어 경계 (\\b)가 있음을 주장함으로써 충족됩니다. 즉, 다음에 올 문자, 숫자 또는 밑줄이 없음을 의미합니다 (모든 조건을 파악함). 그런 다음 패턴도 리터럴 기간 (\\.)을 포함하려고하지만 비 (?)가 있는지 상관하지 않습니다. 모든 것은 빈 문자열로 대체됩니다. 첫 번째 조건에서는 공간을 일치시키고 제거하지 않습니다. 왜냐하면 SomeCompany inc incSomeCompanyinc이 될 것이기 때문입니다. A와, 또한

Pattern pattern = Pattern.compile(
    "[ ](?:inc|ltd|corp)\\b\\.?", 
    Pattern.CASE_INSENSITIVE 
); 
Matcher matcher = pattern.matcher(str); 
str = matcher.replaceAll("");