2014-08-29 6 views
7

Ich habe einen großen String, in dem ich & Zeichen in folgenden Mustern verwendet verfügbar -Java String Ersetzen '&' mit & aber nicht & zu & amp;

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

ich das all Vorkommen von & Charakter & Während ersetzen ersetzen wollen, ich muß auch dafür sorgen, dass Ich konvertiere nicht versehentlich & zu &. Wie mache ich das auf eine leistungsorientierte Art und Weise? Benutze ich regulären Ausdruck? Wenn ja, kannst du mir bitte helfen, den richtigen regulären Ausdruck zu finden, um das oben genannte zu tun?

Ich habe folgende versucht bisher ohne Freude:

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

Sie könnten alle '& 'in' & 'ändern und dann alle' & 'in' & 'ändern. –

+0

Haben Sie andere Escape-Zeichen wie ' ' zum Beispiel? – Pshemo

Antwort

27

Sie einen regulären Ausdruck mit einer negativen Vorschau verwenden können.

Die Regex-Zeichenfolge wäre &(?!amp;).

Mit replaceAll, würden Sie erhalten:

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

So ist der Code für einen einzelnen String str wäre:

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

Vielen Dank. Es wirkt wie ein Zauber! – sribasu

+0

Sicher, kein Problem. – khampson

2

du versuchen können, sollte es funktionieren:

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

Auf diese Weise ersetzen Sie zuerst alle & durch & Alles, was Sie haben werden, ist &, und dann ersetzen Sie alle mit &.

+0

Dies ist viel sicherer Option, danke – Bikram

+0

nette Idee, danke –