Tôi hiện đang cố gắng giải quyết vấn đề từ codingbat.com với các cụm từ thông dụng.Lặp lại qua String với .find() trong Java regex
Tôi mới làm điều này, vì vậy các giải thích từng bước sẽ được đánh giá cao. Tôi có thể giải quyết điều này với các phương thức String tương đối dễ dàng, nhưng tôi đang cố gắng sử dụng các biểu thức chính quy.
Đây là lời nhắc: Cho một chuỗi và một chuỗi từ không trống, trả về một chuỗi được tạo từ mỗi char ngay trước và sau mỗi lần xuất hiện của từ trong chuỗi. Bỏ qua các trường hợp không có char trước hoặc sau từ, và một char có thể được bao gồm hai lần nếu nó nằm giữa hai từ.
wordEnds("abcXY123XYijk", "XY") → "c13i"
wordEnds("XY123XY", "XY") → "13"
wordEnds("XY1XY", "XY") → "11"
vv
Mã của tôi vậy, đến nay:
String regex = ".?" + word+ ".?";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
String newStr = "";
while(m.find())
newStr += m.group().replace(word, "");
return newStr;
Vấn đề là khi có nhiều trường hợp của chữ trong một hàng, các chương trình bỏ lỡ nhân vật trước từ vì m. find() tiến xa hơn nó.
Ví dụ: wordEnds("abc1xyz1i1j", "1")
nên trở "cxziij"
, nhưng phương pháp của tôi trả "cxzij"
, không lặp lại những "i"
tôi sẽ đánh giá cao một giải pháp không lộn xộn với một lời giải thích tôi có thể áp dụng đối với các vấn đề regex chung khác.
Xem câu trả lời này về các biểu thức nhìn xung quanh thường xuyên http: // stackoverflow. com/a/2995621/324900 – Reddy
thực sự hữu ích, cảm ơn – Rishi
rất vui khi được trợ giúp! :) – Reddy