Aktualnie próbuję rozwiązać problem z codingbat.com za pomocą wyrażeń regularnych.Iterowanie za pomocą łańcucha znaków z .find() w języku Java regex
Jestem nowicjuszem, więc docenimy wyjaśnienia krok po kroku. Mógłbym to stosunkowo łatwo rozwiązać za pomocą metod String, ale staram się używać wyrażeń regularnych.
Oto podpowiedź: Dany ciąg znaków i niepusty ciąg wyrazów, zwracają ciąg znaków z każdego znaku tuż przed i tuż po każdym pojawieniu się słowa w ciągu znaków. Ignoruj przypadki, w których przed słowem lub po słowie nie ma znaku, a znak może być zawarty dwa razy, jeśli znajduje się pomiędzy dwoma wyrazami.
wordEnds("abcXY123XYijk", "XY") → "c13i"
wordEnds("XY123XY", "XY") → "13"
wordEnds("XY1XY", "XY") → "11"
itp
Mój kod do tej pory:
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;
Problemem jest to, że gdy istnieje wiele wystąpień słowa w rzędzie, program zdobywa znak poprzedzający słowo ponieważ m. find() rozwija się poza nią.
Na przykład: wordEnds("abc1xyz1i1j", "1")
powinien powrócić "cxziij"
, ale moja metoda zwraca "cxzij"
, nie powtarzając "i"
chciałbym docenić non-brudny roztwór z wyjaśnieniem mogę zastosować do innych problemów ogólnie regex.
Zobacz tę odpowiedź o wygląd wokół regularnych wyrażeń http: // stackoverflow. com/a/2995621/324900 – Reddy
naprawdę przydatne, dzięki – Rishi
cieszę się z pomocy! :) – Reddy