我必须以一个句子作为输入,从其中一个单词中提取每个单词,并与它们一起打印它们各自的辅音计数。这是我正在使用的代码:

for(int i=0;i<l;i++)
    {
        count=0; word="";
        if(sentence.charAt(i)!=' ')
        {
            word+=sentence.charAt(i);
        }
        else
        {
            for(int j=0;j<word.length();j++)
            {
                ch=word.charAt(i);
                if (ch!='A'&&ch!='E'&&ch!='I'&&ch!='E'&&ch!='O'&&ch!='U')
                {
                    count++;
                }
            }}
            System.out.print(word+"\t"+count);}


我一直在尝试调试它,并且总是得到不需要的各种输出。
我面临的两个主要问题是:


如何不使用Scanner或其他类而仅使用基本循环从句子中提取单词
如何列出正确的辅音计数正确格式化为表格形式


此外,我打算将提取的单词以等于其辅音计数的索引添加到String数组中。

StringArr[count]=" "+word;


如果有两个以上的字具有相同的辅音计数,我将在此处添加空格。

任何帮助表示赞赏。

附注-我是新手,因此请随时指出我可能注意到的所有上下文错误。

最佳答案

如果您可以使用最简单的代码来解决问题,则代码会更少,(通常)更容易理解,因此错误也更少。

辅音的数量就是除去非辅音的长度:

int count = str.replaceAll("(?i)[^b-df-hj-np-tv-z]", "").length();


正则表达式说明:


(?i)表示忽略大小写
[^...]是否定的字符类,即列表中未包含的任何字符
b-d表示在bd(包括)范围内的字符
其他字符范围等


该代码也可以满足一些极端情况,而您的代码有一个bug。它把所有“非元音”都算作辅音,但这也算撇号。考虑"can't"有3个辅音。

使用上面的内容,加上split()以获得“单词”:

for (String word : sentence.split("\\s+")) {
    int count = str.replaceAll("(?i)[^b-df-hj-np-tv-z]", "").length();
    System.out.println(word + '\t' + count);
}


使用流并内联计数,您可以在1条语句中进行操作:

Arrays.stream(sentence.split("\\s+"))
  .forEach(w -> System.out.println(w + '\t' +
     w.replaceAll("(?i)[^b-df-hj-np-tv-z]", "").length());


免责声明:代码可能无法按照我在手机上显示的方式进行编译或运行(但是很有可能运行该代码)

关于java - 提取给定句子中的所有单词,并将它们的辅音计数打印出来,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40825836/

10-09 05:22