我目前正在尝试使用正则表达式解决来自codingbat.com 的问题。
我对此并不陌生,因此将不胜感激。我可以使用 String 方法相对容易地解决这个问题,但我正在尝试使用正则表达式。
提示如下:给定一个字符串和一个非空单词字符串,返回一个由字符串中每个单词出现之前和之后的每个字符组成的字符串。忽略单词前后没有字符的情况,如果字符在两个单词之间,它可能会被包含两次。
wordEnds("abcXY123XYijk", "XY") → "c13i"
wordEnds("XY123XY", "XY") → "13"
wordEnds("XY1XY", "XY") → "11"
ETC
到目前为止我的代码:
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;
问题是当连续有多个单词实例时,程序会错过单词前面的字符,因为 m.find() 超出了它。
例如:wordEnds("abc1xyz1i1j", "1")
应该返回"cxziij"
,但我的方法返回"cxzij"
,不重复"i"
我将不胜感激一个简单的解决方案,并附上我可以应用于其他一般正则表达式问题的解释。