2015-03-14 33 views
6

kelime içine normal ifade Aşağıdaki giriş dizesi vardır:Java parantez

flag1 == 'hello' and flag2=='hello2' 

(dize uzunluğu ve == 'şey' değişir).

İstenilen çıktı:

flag1==("hello") and flag2=("hello2") 

Ben

line = line.replaceAll("(\\s*==\\s*)", "(\"") 

denedi ama bu beni bileziklerle vermez. Bunun nasıl yapılabileceği hakkında bir fikrin var mı?

Teşekkürler! ("$1") .Sağlıklı demo tarafından

+2

bunu yapmak için bir yol @hwnd 'ın kullanılan deneyin. Teşekkür eden herkese teşekkürler :) – user100001

+0

Ama bu nasıl oluyor? Boşlukları değiştirir == ' – vks

+0

@vks - boşlukları değiştiririm == bir tane daha ile replaceAll() – user100001

cevap

7

, sen arasındaki her şeyi maç olabilir alıntılar ve değiştirin.

String s = "flag1 == 'hello' and flag2=='hello2'"; 
s = s.replaceAll("'([^']+)'", "(\"$1\")"); 
System.out.println(s); // flag1 == ("hello") and flag2==("hello2") 

değiştirdiğiniz == etrafında boşluk isterseniz:

s = s.replaceAll("\\s*==\\s*'([^']+)'", "==(\"$1\")"); 
2

Sen replaceAll() iki adımda yapabilirsiniz:

str.replaceAll("'(?=\\w)","('").replaceAll("(?<=\\w)'$?", "')"); 

Tam kod örneği: Ben yanlış anlama olduğum sürece

String str = "flag1 == 'hello' and flag2=='hello2'"; 
str = str.replaceAll("'(?=\\w)","('") 
     .replaceAll("(?<=\\w)'$?", "')"); 

System.out.println(str); // prints flag1 == ('hello') and flag2==('hello2') 
2

bu

s = s.replaceAll("(=\\s*)'(.*?)'", "$1(\"$2\")"); 
İlgili konular