我从用户那里得到3个字符串作为输入,然后对每个单词中的元音计数并按如下方式打印:如果元音计数= 0和1则打印0;如果元音计数= 2则打印2如果元音计数大于或等于3,然后打印3。 我尝试了这段代码。
Scanner in = new Scanner(System.in);
String[] str = new String[3];
for (int i = 0; i<3; i++)
str[i] = in .nextLine();
for (int j = 0; j<3; j++) {
String s1 = str[j];
String s = s1.toLowerCase();
int count = 0;
for (int i = 0; i<s.length(); i++)
{
if (s.charAt(i) == 'a' || s.charAt(i) == 'e' || s.charAt(i) == 'i' || s.charAt(i) == 'o' || s.charAt(i) == 'u') {
count++;
}
if (s.charAt(i) == ' ') {
if (count == 0||count == 1) {
System.out.print("0");
} else if (count == 2) {
System.out.print("1");
} else {
System.out.print("3");
}
count = 0;
}
}
if (count == 0||count == 1) {
System.out.println("0");
} else if (count == 2) {
System.out.println("1");
} else {
System.out.println("3");
}
}
但是有一个条件,即使用户输入的字符串超过3个单词,也只能打印3个单词的元音计数。例如,如果用户输入字符串“大家好,你好,我很好和你“它打印” 010 011 001”仅像这样,但是此代码打印为“ 010” 011 00100“。现在如何更改代码以仅输出3个单词而不是超过3个单词来打印元音计数?
答案 0 :(得分:1)
您需要在第三个单词后面稍作休息。一种选择是制作一个额外的变量来跟踪它,并在字符为空格时增加它。 3个字之后,您就可以打破循环。
其他选择是使用split()
方法将字符串拆分成单词,然后仅对前3个进行迭代。
答案 1 :(得分:0)
您可以简化很多代码,并且可以更轻松地实现所需的功能。您可以拆分字符串,而不是在每个字符上循环。然后循环播放单词。像这样:
for (int j = 0; j<3; j++) {
String[] words = str[j].toLowerCase().split(" ");
// Use Math.min, thanks that it works even if you have only 2 words
for(int i = 0; i < Math.min(3, words.length()); i++) {
int count = 0;
for (char letter : words[i].toCharArray()) {
// if letter is vowel: count += 1;
}
// System.out.println depending on count value
}
}
答案 2 :(得分:0)
您可以使用正则表达式使用以下方法将单词拆分为句子:
String[] splits = myPhrase.split(" ");
要拆分句子中的单词,但是,您必须注意,如果用户输入更多空格,则第一个空格被“消除”,而后面的空格最终被拆分。 例如:
String phrase = "1 2 3 z";
String[] splits = phrase.split(" ");
生成以下数组:[1|2| |3| | |z]
。
因此,在我看来,此时您可以使用过滤器,再次遍历数组/列表,从而消除当您滚动浏览数组/列表时从正则表达式或派生的任何空间并找到您不考虑的空间。 此时,请分析数组/列表的前3个元素,并丢弃其他元素(也许使用计数器)。
最后,再次使用正则表达式,您还可以使用以下命令检查您正在分析的字符是否是元音:
if (s.charAt(i).matches("[AEIOUaeiou]")){ /*it's a vowel*/}