2014-08-29 17 views
7

Tôi có một chuỗi lớn trong đó tôi có & nhân vật sử dụng có sẵn trong mẫu sau -Chuỗi Java Thay thế '&' bằng & nhưng không phải & đến & amp;

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

Tôi muốn thay thế tất cả các lần xuất hiện của & nhân vật để & Trong khi thay thế này, tôi cũng cần phải đảm bảo rằng Tôi không nhầm lẫn chuyển đổi số & thành &. Làm cách nào để làm điều đó theo cách hiểu biết hiệu suất? Tôi có sử dụng cụm từ thông dụng không? Nếu có, xin vui lòng bạn có thể giúp tôi để lấy biểu thức chính quy phải để làm điều trên?

Tôi đã thử sau cho đến nay không có niềm vui:

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

Bạn có thể thay đổi tất cả '&' thành '&' và sau đó thay đổi tất cả '&' thành '&'. –

+0

Bạn có các ký tự thoát khác như ' ' chẳng hạn? – Pshemo

Trả lời

27

Bạn có thể sử dụng một biểu thức chính quy với một lookahead tiêu cực.

Chuỗi regex sẽ là &(?!amp;).

Sử dụng replaceAll, bạn sẽ nhận được:

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

Vì vậy, các mã cho một chuỗi đơn str sẽ là:

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

Cảm ơn rất nhiều. Nó hoạt động như một say mê! – sribasu

+0

Chắc chắn, không sao cả. – khampson

2

Bạn có thể thử điều này, cần làm việc:

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

Bằng cách đó, trước tiên bạn thay thế tất cả & bằng & vì vậy tất cả những gì bạn có là &, và sau đó, bạn thay thế tất cả chúng bằng &.

+0

Đây là tùy chọn an toàn hơn, cảm ơn – Bikram

+0

ý tưởng hay, cảm ơn –

Các vấn đề liên quan