2014-08-29 36 views
7

Ben şu desenler mevcuttur kullanılan & karakterleri sahip olduğu geniş String - Bu değiştirirken ben & için & karakterin tüm tekrarlarını değiştirmek isteyenJava dize & ile '&' değiştirin fakat & amp & için;

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

, ben de emin olmak gerekir Yanlışlıkla &'u &'a dönüştürmem. Bunu performans konusunda bilgili bir şekilde nasıl yaparım? Düzenli ifade kullanır mıyım? Eğer evet ise, lütfen yukarıdaki yapmak için doğru düzenli ifadeyi almam için bana yardımcı olabilir misiniz?

Ben şimdiye kadar hiçbir sevinç ile aşağıdaki denedim:

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

Sen değişebilir bütün '&' için '&' ve sonra değiştirmek tüm '&' '& için'. –

+0

Örneğin   'gibi başka kaçış karakteriniz var mı? – Pshemo

cevap

27

Bir negatif lookahead ile normal bir ifade kullanabilirsiniz.

düzenli ifade dize &(?!amp;) olurdu. replaceAll kullanma

, sana ulaşabilir:

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

Yani tek bir dize str için kod şöyle olacaktır:

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

Çok teşekkürler. Bir çekicilik gibi çalışır! – sribasu

+0

Elbette, sorun değil. – khampson

2
Bu deneyebilirsiniz

, çalışmalıdır:

data = data.replaceAll("&","&").replaceAll("&","&"); 
ilk & tüm & yerine

Bu şekilde böylece gerekecek tüm & olduğunu ve o zaman, & ile hepsini değiştirin.

+0

Bu çok daha güvenli bir seçenek, teşekkür – Bikram

+0

güzel bir fikir, teşekkürler –

İlgili konular