2014-08-29 3 views
7

가 나는 다음과 같은 패턴으로 중고 & 문자가있는 큰 문자열이 -이 교체하는 동안 나는 & 에 & 캐릭터의 모든 항목을 대체 할자바 문자열 '&'를 &으로 바꾸되, &에서 &으로 바꾸지 말 것;

A&B 
A & B 
A& B 
A &B 
A&B 
A & B 
A& B 
A &B 

을, 나는 또한 확인해야 나는 실수로 &&으로 변환하지 않습니다. 성능에 정통한 방법으로 어떻게 할 수 있습니까? 정규 표현식을 사용합니까? 그렇다면 위의 작업을 수행하기 위해 올바른 정규 표현식을 픽업하도록 도와주십시오.

지금까지없는 기쁨으로 다음 시도했다 :

data = data.replace(" & ", "&"); // doesn't replace all & 
data = data.replace("&", "&"); // replaces all &, so & becomes & 
+3

모든 '&'을'&'로 변경 한 다음 모든'&'를'&'으로 변경할 수 있습니다. –

+0

예를 들어 ' '과 같은 다른 이스케이프 문자가 있습니까? – Pshemo

답변

27

당신은 부정적 예측와 정규 표현식을 사용할 수 있습니다.

정규식 문자열은 &(?!amp;)입니다. replaceAll를 사용

, 당신은 얻을 것이다 :

A&B 
A & B 
A& B 
A &B 
A&B 
A & B 
A& B 
A &B 

그래서 하나의 문자열 str에 대한 코드는 다음과 같습니다

str.replaceAll("&(?!amp;)", "&"); 
+0

고마워요. 그것은 매력처럼 작동합니다! – sribasu

+0

예. 문제 없습니다. – khampson

2
당신이 시도 할 수

, 그것은 작동합니다 :

data = data.replaceAll("&","&").replaceAll("&","&"); 

먼저 &을 모두 &으로 바꿉니다. 그래서 당신이 가지고있는 것은 &이고, 그 다음에는 모두 &으로 바꿉니다.

+0

이것은 훨씬 안전한 옵션입니다. 감사합니다. – Bikram

+0

좋은 아이디어입니다. 감사합니다. –