使用字符串方法查找和计算字符串中的元音?

时间:2012-12-05 23:47:00

标签: java string

我的家庭作业存在这个问题(我老实说,至少不要试图隐藏它) 我在弄清楚如何做到这一点时遇到了问题。

给出以下声明:String phrase =“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);

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

10 个答案:

答案 0 :(得分:9)

phrase.substring(i, i++);应为phrase.substring(i, i + 1);

i++给出i的值,然后将其加1。正如您现在所做的那样,String j实际上是phrase.substring(i, i);,它始终是空字符串。

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

答案 1 :(得分:9)

我认为不需要在循环中使用print语句。

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

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

答案 2 :(得分:8)

这可能/应该是一个单行

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

及其仅字符串方法

答案 3 :(得分:4)

改进上述答案以考虑大写字母中的元音:

System.out.println(s.length() - s.toLowerCase().replaceAll("a|e|i|o|u|", "").length());

答案 4 :(得分:0)

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

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

希望有所帮助!

答案 5 :(得分: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);


     }


}

}

答案 6 :(得分: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);
}

答案 7 :(得分: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())); 
     }   

  } 

答案 8 :(得分: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"
        );
    }

}

答案 9 :(得分:-1)

public class 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]);
        }

    }
}