2015-01-25 5 views
0

들어오는 연결의 IP 주소를 가져 와서 YML 파일 (SnakeYML API)에 저장하려고합니다. IP를 수신하고 "127.0.0.1"을 올바르게 반환 한 수신 로컬 연결을 테스트했습니다. 나는 그것을에이 방법을 실행하면String.replaceAll() 정규 표현식 대신 모든 문자를 대체합니다. - Java

그러나 :

address.replaceAll(".", "-"); 

반환이는 "---------" (나는 SnakYML는 같은 기간을 사용하기 때문에 기간을 교체해야 경로 구분 기호)

아마 정말 어리석은 일이지만, 나는 그것을 이해할 수 없습니다.

+1

믿거 나 말거나, 실제로 IntelliJ IDEA는 코드에 대한 경고 *와 해결 방법을 제안합니다. –

답변

4

"." 대신 "\\."을 사용해야합니다. 그 이유는 .이 모든 문자와 일치하는 정규 표현식이기 때문입니다. 따라서 실제 도트 만 일치 시키려면이 코드를 이스케이프 처리해야합니다. address.replaceAll("\\.", "-");을 작성하십시오.

대신 replaceAll 대신 replace 메서드를 사용하는 것이 좋습니다.이 메서드는 정규 표현식 대신 해당 인수를 문자 그대로 해석합니다. 그래서 address.replace(".", "-"); 당신이 원하는 것을 할 것입니다.

+0

감사! 나는 그것이 그와 같은 단순한 무언가 일 줄 알았지 만 나는 그것을 알지 못했다. 그 방법에서 정규 표현식이었습니다. –

1

replaceAll 정규식을 사용하여 정규식에 .대표하는 모든 문자 (라인 분리 제외) 그래서 당신은 "\\." 또는 "[.]" (하나의 요소 character class)를 통해 예를 들어, .을 탈출해야합니다.

그러나 명확하고 아마 빠른 방법은 정규식 엔진을 사용하지 않는

address = address.replace('.', '-'); 

같은 replace(char, char)을 사용하는 것입니다.

또한 을 사용하면 두 인수에서 모든 정규식 메타 문자를 자동으로 이스케이프 처리 할 수 ​​있습니다 (예 : replacement은 정규식 엔진에서 사용할 수있는 특수 문자를 가질 수도 있음).