2013-04-02 2 views
4

패턴 일치를 사용하여 자바 문자열의 모든 단일 문자 단어를 제거하고 싶습니다. 나는 다음과 같이 코딩했습니다 :자바 패턴 일치를 사용하여 단일 문자 단어 제거

String str = "[email protected]"; 

    //remove single char words and extra white spaces 
    inputStr = inputStr.replaceAll("\\b[\\w']{1}\\b", "").replaceAll("\\s+", " ").trim(); 

입력이 단일 문자 단어가 아니므로 출력을 P @라고 예상합니다. 그러나 나는 그것을 없애기 때문에 @로 결과물을 얻고있다. 그래서 기본적으로 일치하는 패턴을위한 알파벳 문자 만 고려한다. 반면에 나는 입력 된 문자열의 길이의 기초에 맞추기를 원한다.

도와주세요.

+0

문제는 문자로 간주하지 않는 '\ b' 인 것 같습니다. – brimborium

답변

0

사용 솔루션이

str = str.replaceAll("(^.$|\\s.\\s|^.\\s|\\s.$)", "").replaceAll("\\s+", " ").trim(); 

문제는 당신이 귀하의 경우에는 작동하지 그래서 말과 단어의 시작 문자를 기다리고 있었다 \b를 사용하고 있던 것이 었습니다. 단어 문자 (아무것도 승 \ 일치)와 비 단어 문자뿐만 아니라, 개시시 및 ([^ \ w] 또는 \ W 일치 아무것도) 사이의 위치에서

/b

매치/또는 문자열의 첫 번째 및/또는 마지막 문자가 단어 문자 인 경우 문자열의 끝.

REFER FOR REGULAR EXPRESSION

+0

이것은 완벽한 해결책은 아닙니다. 언급 된 예제에만 해당되는 솔루션입니다. 내 문자열을 "P"로 변경하면 그대로 유지됩니다. 그러나 내가 말했듯이, 나는 단서 문자를 제거하고 싶다. – paras2682

+0

이 솔루션은 공백으로 묶이지 않은 단어는 고려하지 않습니다. (예 : 문자열의 시작/끝 부분에 단어 나 쉼표 또는 마침표가 뒤에 오는 단어). – brimborium

+0

@brimborium OP는 다른 캐릭터를 포함하여 문자열의 실제 길이가 필요하다고 언급했습니다. – Meherzad

2

이를 사용해보십시오 :

 String data = "asd df R# $R $$ $ 435 4ee 4"; 

    String replaceAll = data.replaceAll("(\\s.\\s)|(\\s.$)", " "); 
    System.out.println(replaceAll); 

출력은 다음과 같습니다

\s([^\s]{1})\s 

는 단일 문자 공백이 아닌 잡을해야하는으로 구분 : asd df R# $R $$ 435 4ee

0

이 정규식을보십시오 양쪽에 공백이 있습니다. ',', '.'와 같이 공백이 아닌 문자를 받아 들일 필요가 있다면 구분 기호로 추가해야합니다.

0

테스트 케이스는 다음과 같습니다

ASD 안양 R을 # $의 R은 $$ $ (435) 4ee 4 이봐,이 테스트 i 서 @ 위 코드의 출력은

"[!-~]?\\b[A-z]\\b[!-~]?" 
"[!-~]?\\b[\\w]\\b[!-~]?" 

를 원이다 버디 :

ASD $$ $ (435) 4ee 4 df라고 봐이 테스트 ASD $$ $ (435) 4ee 헤이 번째 버디
df라고
를 원이다 버디 테스트가 필요합니다.


두 번째에는 네 개가 누락되었습니다. 두 번째 정규식은 하나의 숫자가 세지 않았는지 알지 못하는 숫자를 제거합니다.

관련 문제