例如
String text = "sentence"; // (number of e's = 2)
该字符串中有三个e,但结果应该是2
,因为第三个是最后一个。这就是我到目前为止所做的:
public static void main(String[] args) {
int count =0;
String text = "sentence";
Pattern pat = Pattern.compile("[e]+");
Matcher m = pat.matcher(text);
while (m.find()) {
count++;
}
System.out.println(count);
}
答案 0 :(得分:3)
替换+
之后存在负前瞻的e
。 e+
与一个或多个e
匹配,因此正则表达式引擎应将eee
视为单个匹配。 e
之后的负面预测,即e(?!$)
有助于找到所有e
,但不会找到存在于行尾的那个。
int count = 0;
String text = "sentence";
Pattern pat = Pattern.compile("e(?!$)");
Matcher m = pat.matcher(text);
while (m.find()) {
count++;
}
System.out.println(count);
答案 1 :(得分:0)
Matcher
方法可以告诉您匹配的开始和结束索引。如果end(下一个字符)匹配字符串的长度,则它是最后一个字符。 E.g。
int count =0;
String text = "sentence";
Pattern pat = Pattern.compile("e");
Matcher m = pat.matcher(text);
while (m.find() && m.end() != text.length()) {
count++;
}
System.out.println(count);
如果您想排除单词的最后一个字母而不是句子的最后一个单词,则可以检查结束字符是否为alpha:
int count =0;
String text = "sentence";
Pattern pat = Pattern.compile("e");
Matcher m = pat.matcher(text);
while (m.find() &&
m.end() != text.length() &&
Character.isAlphabetic(text.charAt(m.end()))) {
count++;
}
System.out.println(count);