我必须以一个句子作为输入,从中逐个提取每个单词,并用它们打印它们各自的辅音计数。这是我正在使用的代码:
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 或其他类且仅使用基本循环的情况下从句子中提取单词
- 如何以表格形式正确列出准确的辅音计数
此外,我打算将提取的单词添加到字符串数组中,其索引等于其辅音计数。
StringArr[count]=" "+word;
如果两个以上的单词具有相同的辅音计数,我会在此处添加空格以便让路。
感谢任何帮助。
P.S.-我是这方面的新手,所以请随时指出我可能注意到的任何上下文错误。
最佳答案
如果您使用最简单的代码来解决问题,您将拥有更少的代码,这(通常)更容易理解,因此错误也更少。
辅音的数量就是删除非辅音的长度:
int count = str.replaceAll("(?i)[^b-df-hj-np-tv-z]", "").length();
正则表达式解释:
(?i)
表示忽略大小写[^...]
是一个否定字符类,即不在列表中的任何字符b-d
表示b
到d
(含)范围内的字符- 其他字符范围等
此代码也适用于边缘情况,而您的代码有一个错误;它将所有“非元音”都算作辅音,但这也会算作撇号。考虑一下“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/