需要计算给定文本中的音节数。
一个或多个元音的每个连续序列,如果单词的末尾有一个单独的“ 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/

10-10 14:56