2014-12-23 3 views

답변

6

String.replace() will only replace literals이 첫 번째 문제입니다.

두 번째 문제점은 \s이 Java 문자열 리터럴에서 정의에 따라 유효한 이스케이프 시퀀스가 ​​아니라는 것입니다.

원하는 것은 아마도 "\\s+"입니다.

그렇지만 .replace()은 정규식으로 사용하지 않습니다. 대신 .replaceAll()을 사용해야합니다.

s.replaceAll("\\s+", ""); 

그러나 다른 문제가 있습니다. 당신이 원하는 것은 경우에만 첫 번째 항목을 대체 할

  • :

    private static final Pattern SPACES = Pattern.compile("\\s+"); 
    
    // In code... 
    
    SPACES.matcher(input).replaceAll(""); 
    

    기타 참고 사항 : 당신은 자주 사용하게 될 것 같다 ... 따라서, Pattern를 대신 사용, .replaceFirst(); String가있다, 그래서 않는 String에 당신 .replace{First,All}()새로운 Pattern는 각각의 모든 호출에 대해 다시 컴파일 Pattern

  • . 반복적으로 일치해야하는 경우 Pattern을 사용하십시오!
4

It's a valid regular expression pattern 그러나 \sString 글자 escape sequence이 아닙니다. \을 탈출하십시오.

String str2 = str.replace("\\s+", " "); 

제안한대로 String#replace(CharSequence, CharSequence)은 정규식으로 제공하는 인수를 고려하지 않습니다. 따라서 컴파일 할 프로그램이 있어도 원하는 것을 수행하지 못합니다. String#replaceAll(String, String)을 확인하십시오.

+0

글쎄, 또 다른 문제가 있지 않습니까? '.replace()'는 정규 표현식을 허용하지 않고 오직 리터럴 만 허용합니다 ... – fge