计算除字符串末尾之外的所有字符的出现次数

时间:2015-11-12 10:05:35

标签: java regex

例如

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);
}

2 个答案:

答案 0 :(得分:3)

替换+之后存在负前瞻的ee+与一个或多个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);