2009-02-03 40 views

Trả lời

21

'*' có nghĩa là không hoặc nhiều kết quả trùng khớp của ký tự trước đó. Vì vậy, mỗi chuỗi rỗng sẽ được thay thế bằng "e".

Bạn có thể muốn sử dụng '+' thay vì:

replaceAll("B+", "e")

+0

99% đúng ... đó là một tìm kiếm tham lam, vì vậy nếu nó có thể phù hợp với "B", nó sẽ. Nếu không, đầu ra sẽ là "eee1e2e3e" – user54650

+0

Điều đó không giải thích ':' ở đầu ra, mặc dù ... – luiscubal

+0

':' có thể là lỗi sao chép-dán, mã được cung cấp không thể tạo ra ' : '... –

7

Bạn muốn điều này cho mô hình của bạn:

B+ 

Và mã của bạn sẽ là:

String result = "B123".replaceAll("B+","e"); 
System.out.println(result); 

Dấu "*" khớp với "không hoặc nhiều hơn" - và "số không" bao gồm không có gì trước B, cũng như giữa tất cả các ký tự khác.

+0

Whups, cảm ơn Paul! : D –

+0

Trong lần thử đầu tiên regex tiêu thụ 'B', không phải là một chuỗi rỗng. Sau đó, nó khớp với chuỗi trống ở mỗi vị trí, bắt đầu từ vị trí nơi khớp đầu tiên bị tắt. –

1

Tôi đã dành hơn một tháng làm việc tại một công ty công nghệ lớn sửa lỗi với * (splat!) Trong cụm từ thông dụng. Chúng tôi duy trì một hệ điều hành UNIX ít được biết đến. Đầu của tôi gần như phát nổ vì nó phù hợp với ZERO xuất hiện của một cuộc gặp gỡ với một nhân vật. Nói về một lỗi khó hiểu thông qua việc tái tạo của riêng bạn. Chúng tôi đã thay thế đôi trong một số trường hợp. Tôi không thể hiểu tại sao mã đã sai, nhưng đã có thể thêm mã mà bắt trường hợp đặc biệt (sai) và ngăn chặn đôi subbing và không phá vỡ bất kỳ tiện ích bao gồm nó (bao gồm cả sed và awk). Tôi đã tự hào đã sửa lỗi này, nhưng như đã đề cập.

Vì lợi ích của chúa, chỉ cần sử dụng + !!!!

+0

Vâng, điều đó đôi phù hợp là khá kỳ quái. Nó ném tôi một vài lần trước khi tôi học để xem nó. Và +1 cho luôn sử dụng + thay vì * nếu bạn có thể. –

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