需要计算给定文本中的音节数。
一个或多个元音的每个连续序列,如果单词的末尾有一个单独的“ e”(如果单词具有另一个元音或一组连续的元音),则组成一个音节(将“ y”作为元音)
public static void main(String[] args) {
// TODO Auto-generated method stub
int count =0;
String text = "This is a test. How many??? Senteeeeeeeeeences are here... there should be 5! Right?";
Pattern pat = Pattern.compile("[Ee]+(?!\\b)|[aiouyAIOUY]+");
Matcher m = pat.matcher(text);
while (m.find()) {
count++;
System.out.println(m.group());
}
System.out.println(count);
}
上面程序的输出是15
必须是16
它应消除不包含任何元音的单词中的最后一个字符时e的计数,即,不应消除单词(be)中e的计数
如何在模式中指定该条件
最佳答案
尝试这个
"(\\b[^aiouyeEAIOUY]+[Ee]\\b)|([aiouyAIOUY]\\b)|([aiouyeAIOUYE]{2,}\\b)|([aiouyeAIOUYE]+(?!\\b))"
以driu为目的的adn:
Pattern pat = Pattern.compile("(\\b[^aiouye]+e\\b)|([aiouy]\\b)|([aiouye]{2,}\\b)|([aiouye]+(?!\\b))", Pattern.CASE_INSENSITIVE);
我观察到要计数的4个场景(我将这4个部分分组以进行更好的调试):
e结尾,单词中没有其他元音
该词的末尾有一个元音(e除外)
该单词的末尾有两个或多个元音(包括e)
单词中有一个或多个元音(包括e),但结尾没有
关于java - 如何使用正则表达式Java消除特定字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33670793/