2014-01-29 3 views
1

가 나는 "%"로 모든 특수 문자를 대체하기 위해 노력하고있어 작동하지 않습니다자바 완전히 대체하기() 정규식처럼

"123.456/789" -> "123%465%798" 

내 정규 표현식 것은 : 온라인 도구에서

[^a-zA-Z0-9]+ 

* 완벽하게 작동하지만 java에서

s.replaceAll("[^a-zA-Z0-9]+", "%"); 

문자열은 변경되지 않습니다.

*

내가 시도 : http://www.regexplanet.com/ http://regex101.com/

+9

's의 = s.replaceAll ("[^ A-zA- Z0-9] + ","% ");'문자열은 변경 불가능합니다. –

+1

@ZouZou : omg thx! 4 초, 멋진 응답 시간 xD – user3181103

답변

2

문자열은 불변이다. 당신은 s 변수 :

s = s.replaceAll("[^a-zA-Z0-9]+", "%"); 
//^this creates a new String 
+2

나는 너의 친구가 아니야, 친구. – crush

+0

너 무슨 소리 야? :) –

+0

문제가있어, 남자? – LisuBB

1

당신은 문자열을 변경할 수 없습니다가 대신 완전히 대체하기는 새로운 값을 반환에 새로운 String를 재 할당하는 것을 잊었다. 그래서 당신은 당신이 메소드를 호출하는 String을 수정하지 마십시오, String 클래스의 모든 메소드 등이

String newStr = s.replace(...) 
+1

stackoverflow에서 얼마나 빨리 문제가 해결되는지 환상적입니다 – Yanis

+1

그들이 간단 할 때 ... – crush

2

replaceAll()처럼 사용해야합니다. 이것이 String이 불변의 객체라고 말하는 이유입니다. 당신이 그것을 '수정'할 경우 String s을 수정하지 마십시오, 당신은 사실

s = s.replaceAll("[^a-zA-Z0-9]+", "%"); 

할 필요가있다. 여기서 일어나는 일은 새로운 String 객체가 함수에서 반환된다는 것입니다. 그런 다음 해당 참조를 s에 할당합니다. 여러분의 기대 :)에 따라

0

작동 코드

import java.util.regex.Pattern; 


public class Regex { 

    public static void main(String[] args) { 
     String s = "123.456/789"; 
     Pattern p = Pattern.compile("[^a-zA-Z0-9]+"); 
     String newStr = s.replaceAll("[^a-zA-Z0-9]+", "%"); 
     System.out.println(s + " -> " + newStr); 
    } 
} 

출력 : 123.456/789 -> 1백23퍼센트 4백56퍼센트 789

관련 문제