9

我有这个家庭作业问题(我说实话,至少没有试图隐藏它)而且我在弄清楚如何去做时遇到了问题。

给定以下声明:字符串短语=“WazzUp?-谁在第一个???-IDUNNO”;编写必要的代码来计算字符串中元音的数量并将适当的消息打印到屏幕上。

这是我到目前为止的代码:

String phrase =  " WazzUp ? - Who's On FIRST ??? - IDUNNO";
int i, length, vowels = 0;
String j;
length = phrase.length();
for (i = 0; i < length; i++)
{

  j = phrase.substring(i, i++);
  System.out.println(j);

  if (j.equalsIgnoreCase("a") == true)
    vowels++;
  else if (j.equalsIgnoreCase("e") == true)
    vowels++;
  else if (j.equalsIgnoreCase("i") == true)
    vowels++;
  else if (j.equalsIgnoreCase("o") == true)
    vowels++;
  else if (j.equalsIgnoreCase("u") == true)
    vowels++;

}
System.out.println("Number of vowels: " + vowels);

但是,当我运行它时,它只会产生一堆空白行。任何人都可以帮忙吗?

4

10 回答 10

9

我认为循环中不需要打印语句。

String s = "Whatever you want it to be.".toLowerCase();
int vowelCount = 0;
for (int i = 0, i < s.length(); ++i) {
    switch(s.charAt(i)) {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
            vowelCount++;
            break;
        default:
            // do nothing
    }
}

这会将字符串转换为小写,并检查字符串中的所有字符是否有元音。

于 2012-12-05T23:54:14.063 回答
9

phrase.substring(i, i++);应该是phrase.substring(i, i + 1);

i++给出 的值,i然后将其加 1。正如你现在所拥有的,String jis Effective phrase.substring(i, i);,它始终是空字符串。

您不需要更改循环i主体中的值,for因为它已经在for (i = 0; i < length; i++).

于 2012-12-05T23:49:39.967 回答
8

这可能/应该是单线

System.out.println("the count of all vowels: " + (phrase.length() - phrase.replaceAll("a|e|i|o|u", "").length()));

及其仅字符串方法

于 2014-10-30T20:57:58.677 回答
4

改进上述答案以考虑大写元音:

System.out.println(s.length() - s.toLowerCase().replaceAll("a|e|i|o|u|", "").length());
于 2015-03-02T18:17:02.610 回答
0

使用了 i++ 之后的 i 增量,因此您实际上是在说 string.substring(i,i)。由于结束标记是独占的,这将始终返回一个空字符串。一个简单的解决方法是将其更改为

j = phrase.substring(i, ++i);

希望有帮助!

于 2012-12-05T23:50:24.130 回答
0

计算字符串中元音的数量

class Test {  

      static int a;

      public static String countVowel(String strName) { 

          char ch[] = strName.toCharArray();


          for(int i=0; i<ch.length; i++) {

            switch(ch[i]) {

            case 'a':

             a++;   

            break;      

            case 'e':
                a++;    

                break;

            case 'i':
                 a++;   

                break;

            case 'o':
                 a++;   

                break;

            case 'u':
                 a++;   

                break;

            }

          }

          strName = String.valueOf(a);

          return strName;       
      } 

      public static void main(String[] args) {  

        Scanner s = new Scanner(System.in);
        System.out.print(countVowel(s.nextLine())); 
     }   

  } 
于 2018-08-11T18:04:33.230 回答
0

我知道这是一个旧的编辑,但我认为如果你使用和数组作为元音会更好:

public static void main(String[] args) {

    String phrase = " WazzUp ? - Who's On FIRST ??? - IDUNNO".toLowerCase();
    int vowels = 0;
    String[] array = {"a", "e", "i", "o", "u"};
    for (int i = 0; i < phrase.length(); i++) {
        String j = phrase.substring(i, i + 1);
        System.out.println(j);
        for (int n = 0; n < array.length; n++) {
            if (j.equals(array[n])) {
                vowels++;
            }
        }
    }
    System.out.println("Number of vowels: " + vowels);
}
于 2018-07-05T18:18:35.857 回答
0

我知道我有点晚了,但如果他们正在使用口音,那么这个回复可能会在未来帮助其他人

为了避免出现问题,我们可以使用 Normalizer 将输入文本规范化为 NFD,该规范化器将字母和重音中的重音(例如:变音符号、重音重音、锐音重音、抑扬音符号等)分开。

例子: "schön" ----NFD----> "scho\u0308n"

解决方案是

  1. 用 ( )规范化文本并用 ( )Normalizer替换重音符号replaceAll
  2. 将文本转换为小写
  3. 替换所有不是元音的东西(或任何你想计算的东西)
import java.text.Normalizer;

public class Main {
    private static String str = "This ïs a téxt with vòwêls";

    public static void main(String[] args) {
        // Normalizing the text
        // Replacing all the accents
        // Convert to lowercase
        String text = Normalizer.normalize(str, Normalizer.Form.NFD)
                .replaceAll("[\\u0300-\\u036f]", "")
                .toLowerCase();

        // We replace everything but vowels
        int vowels_count = text.replaceAll("[^aeiou]", "").length();

        System.out.printf("%s%s%s %d %s",
                "\nThe text \"",
                str,
                "\" has",
                vowels_count,
                "vowels"
        );
    }

}
于 2021-04-30T15:21:55.207 回答
0

使用集合:

     String word = "busiunesuse";
     char[] wordchar= word.toCharArray();
     Character allvowes[] ={'a','e','i','o','u'};
     Map<Character, Integer> mymap = new HashMap();

     for(Character ch: wordchar)
     {
         for(Character vowels : allvowes)
         {
            if(vowels.equals(ch))
            {
             if(mymap.get(ch)== null)
             {
                 mymap.put(ch, 1);
             }
             else
             {
                 int val = mymap.get(ch);
                 mymap.put(ch, ++val);
             }
            }

         }
     }

     Set <Character> myset = mymap.keySet();
     Iterator myitr = myset.iterator();

     while(myitr.hasNext())
     {
         Character key = (Character) myitr.next();
         int value = mymap.get(key);
         System.out.println("word:"+key+"repetiotions:"+value);


     }


}

}

于 2018-04-11T06:01:50.897 回答
-1

公共类 JavaApplication2 {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws IOException {
    // TODO code application logic here
    System.out.println("Enter some text");
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String input = br.readLine().toLowerCase();

    char[] vowel = new char[]{'a', 'e', 'i', 'o', 'u'};
    int[] countVowel = new int[5];
    for (int j = 0; j < input.length(); j++) {
        char c =input.charAt(j);
        if(c=='a')
            countVowel[0]++;
        else if(c=='e')
            countVowel[1]++;
        else if(c=='i')
            countVowel[2]++;
        else if(c=='o')
            countVowel[3]++;
        else if(c=='u')
            countVowel[4]++;


    }
     for (int i = 0; i <countVowel.length; i++) {
            System.out.println("Count of vowel " + vowel[i] + "=" + countVowel[i]);
        }

    }
}
于 2014-01-11T09:19:01.207 回答