【发布时间】:2015-04-09 01:14:44
【问题描述】:
我正在学习 Java CodingBat 练习。 Here是我刚刚完成的:
给定一个字符串和一个非空单词字符串,返回一个由字符串中每个单词出现之前和之后的每个字符组成的字符串。忽略单词前后没有字符的情况,如果字符在两个单词之间,它可能会被包含两次。
我的代码,有效:
public String wordEnds(String str, String word){
String s = "";
String n = " " + str + " "; //To avoid OOB exceptions
int sL = str.length();
int wL = word.length();
int nL = n.length();
int i = 1;
while (i < nL - 1) {
if (n.substring(i, i + wL).equals(word)) {
s += n.charAt(i - 1);
s += n.charAt(i + wL);
i += wL;
} else {
i++;
}
}
s = s.replaceAll("\\s", "");
return s;
}
我的问题是关于正则表达式。我想知道上述是否可以使用正则表达式语句,如果可以,如何?
【问题讨论】:
-
这个问题可能很难用 Java 正则表达式解决,因为匹配可能会重叠,例如
abcXY1XYijk在XY上匹配会将cXY1和1XYi作为组。 -
好问题,顺便说一句^ ^
-
添加一些输入和预期输出
-
UTF-16 是可变宽度,而不是固定宽度。每个字符占用一个或两个代码单元。所以
chatAt是错误的。