2016-06-15 4 views
0

java를 사용하고 있으며 아래에 표시된 것처럼 공백이 여러 개 있고 "="기호와 같은 문자열이 있습니다.공간을 이스케이프하고 문자와 같음

String temp = "[name='FPC:CPU']/XM chip/allocate"; 

이 임시 문자열은 공백과 등호로 인해 실패한 다른 프로그램으로 전달됩니다.

어떻게 이스케이프 공간과 "="문자를 사용할 수 있습니까? 내가 temp.replaceAll

+2

"다른 프로그램"이 무엇을 기대하는지, 그리고 등호와 공백을 어떻게 이스케이프해야 하는지를 알아야합니다. 다른 프로그램을 식별하고 프로그램을 호출하는 코드가 문자열을 전달하는지 확인하십시오. –

+0

문자열이 이처럼 이스케이프 처리되면 괜찮습니다. [name \ = 'FPC : CPU']/XM \ chip/allocate – Ammad

+0

그래서 공간을 벗어날 필요가 없습니까? 'replaceAll'의 어떤 부분을 이해하지 못합니까? –

답변

1

를 사용하는 것은 매우 정직해야한다는 것을 할 수있는 방법이 궁금 원래 문자열

[name='FPC:CPU']/XM chip/allocate 

to 

[name\='FPC:CPU']/XM\ chip/allocate 

에서

내 밖으로 원하는 넣어.

System.out.println("foo bar=baz".replaceAll("([ =])" "\\\\$1")); 

는 캡처 그룹을 형성 정규 표현식에서이

foo\ bar\=baz 

괄호를 인쇄해야하고, 문자 클래스 [ =] 공백 및 등호를 캡처합니다.

대체 표현식에서 $1은 첫 번째 캡처 그룹을 나타냅니다. 조금 까다로워지는 유일한 점은 역 슬래시를 피하는 것입니다.

일반적으로 정규식 바꾸기에서 백 슬래시 자체는 이스케이프 문자입니다. 따라서 백 슬래시를 삽입하려면 두 개가 함께 필요합니다. 백 슬래시는 자바 문자열에서도 이스케이프 처리되므로 정규식 이스케이프를 만들기 위해 두 개의 백 슬래시를 Java 문자열에 넣으려면 네 개의 백 슬래시 . 그래서 이것이 당신이 "\\ $ 1"로 끝나는 방법입니다.

+0

네 개의 백 슬래시를 넣는 것이 트릭을 만들었습니다. 나는 세 개를 사용하여 오류가 발생했습니다. – Ammad