왜 java (1.7)가 다음 행에 오류가 발생합니까?java에서 정규식 : str.replace (" s +", "")에 대한 오류
String str2 = str.replace("\s+", " ");
오류 :
Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\)
은 내가 아는 한 "\ S +는"올바른 정규식입니다. 그렇지 않니?
왜 java (1.7)가 다음 행에 오류가 발생합니까?java에서 정규식 : str.replace (" s +", "")에 대한 오류
String str2 = str.replace("\s+", " ");
오류 :
Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\)
은 내가 아는 한 "\ S +는"올바른 정규식입니다. 그렇지 않니?
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
을 사용하십시오!It's a valid regular expression pattern 그러나 \s
은 String
글자 escape sequence이 아닙니다. \
을 탈출하십시오.
String str2 = str.replace("\\s+", " ");
제안한대로 String#replace(CharSequence, CharSequence)
은 정규식으로 제공하는 인수를 고려하지 않습니다. 따라서 컴파일 할 프로그램이 있어도 원하는 것을 수행하지 못합니다. String#replaceAll(String, String)
을 확인하십시오.
글쎄, 또 다른 문제가 있지 않습니까? '.replace()'는 정규 표현식을 허용하지 않고 오직 리터럴 만 허용합니다 ... – fge