2010-04-28 3 views
33

문자열의 공백 문자를 모두 "+"로, 모든 "ß"을 "ss"로 바꾸고 싶습니다. "Java가 regex s와 함께 작동하지 않습니다 : 잘못된 이스케이프 문자열

Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \)

이 : ß 대신 "\의 t"하지만 어떻게 든 노력 .. 내가 \가 공백 s는 사용 못하게 일식 "하지만 그것이 작동 중 하나를하지 않습니다 ... 나는 다음과 같은 오류가 발생합니다 내 코드 :

try { 
    String temp1 = from.getText().toString(); 
    start_from = temp1.replaceAll("ß", "ss"); 
    start_from = start_from.replaceAll("\s", "+"); 
} 

왜 작동하지 않습니까? 그것은 안드로이드, 일식 또는 무엇과 함께 문제가 무엇입니까?

미리 감사드립니다.

+1

문자열 리터럴에서 \ s를 컴파일 할 수 있다는 것에 놀랐습니다. 문자열 리터럴에 \ t를 추가하면 문자열 리터럴에 \\ t가 필요하기 때문에 \ t가 포함 된 일반 표현식이 아닌 탭 문자가 포함 된 일반 표현식이 만들어집니다. – Geoff

+0

나는 그것을 컴파일 할 수 없었다. .. eclipse는 내가 게시 한이 에러 메시지를 내게 주었다. 나는 내가하고 싶은 일을 알려주고 싶었다. – MJB

답변

53

당신은 슬래시

start_from = start_from.replaceAll("\\s", "+"); 
+3

고마워요! 멋진 웹 사이트! :-) "11 분 안에 대답을 수락 할 수 없습니다."....-) – MJB

9

문제는 \ 자바 뿐만 아니라 정규식 패턴에서 이스케이프 문자라는 것이다을 탈출해야합니다. 당신이 정규식 패턴 \n, 말과 일치하려면, 당신은

replaceAll("\n", "+"); 

을 가서 쓰기 싶다면 정규식 패턴은 \n을 끝나게 않을 것이다 : 그것은 것 엔까지 그 어떤 "\n"을 이후, 실제 줄 바꿈되는 Java를 의미합니다. 패턴에 백 슬래시가 포함되도록하려면 해당 백 슬래시를 이스케이프 처리하여 문자열 내에서 특수 문자로 처리되지 않도록해야합니다.

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

너무 감사합니다! :-) – MJB

1

당신은 있으며, java.util.regex.Pattern 클래스를 사용하고 p.matcher(start_from).replaceAll("+")와 함께 p = Pattern.compile("\s"); 같은 것을 사용할 수 있습니다. 또는 "\ s"메타 문자를 "\\ s"로 이스케이프합니다.

+0

jepp 이미 내 코드의 다른 부분에서 패턴을 사용했지만,이 경우 replaceAll (..)을 사용하는 것이 더 쉬울 것이라고 생각했습니다. 감사합니다! – MJB

+0

'Pattern.compile ("\ s")'은 여전히 ​​Java 구문 오류입니다. –

관련 문제