java - 从给定句子中提取所有单词并打印它们及其辅音计数

标签 java arrays string

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

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

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

  1. 如何在不使用 Scanner 或其他类且仅使用基本循环的情况下从句子中提取单词
  2. 如何以表格形式正确列出准确的辅音计数

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

StringArr[count]=" "+word;

如果两个以上的单词具有相同的辅音计数,我会在此处添加空格以便让路。

感谢任何帮助。

P.S.-我是这方面的新手,所以请随时指出我可能注意到的任何上下文错误。

最佳答案

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

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

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

正则表达式解释:

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

此代码也适用于边缘情况,而您的代码有一个错误;它将所有“非元音”都算作辅音,但这也会算作撇号。考虑一下“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/

相关文章:

java - 当元素超过其大小的 1/2 时调整数组大小

java - 以字节为单位的字符串无法转换为等效的字符串

string - DAX Power BI 字符在字符串中的出现

java - 如何在耶拿将一个RDF模型分成两个模型?

java - 从 URL 创建 XML 模式有效但从本地文件创建失败?

javascript - 使用 Javascript 从数组中提取值

C++ 字符串到 char* 数组结构

javascript - 用于替换标点符号(不包括负数)的正则表达式

java - Java中数组空间被重用?

java - JasperReports 与 Java Bean : Failed to render image (the field of InputStream type)