JavaBeginner
JavaBeginner

Reputation: 9

Count vowels in a list of strings and print the counts

I have a code that must print only vowels from my strings in the array list but I'm not sure if I'm doing it right in my method. How do I resolve this? Its only printing out 5 of them because I'm not sure how to directly get each specific vowels. Please find the below code that I have tried.

import java.util.*;

public class vowels {

    public static void main(String[] args) {

        ArrayList<String> vowels = new ArrayList<String>();

        vowels.add("mitsubishi");
        vowels.add("subaru");
        vowels.add("nissan");
        vowels.add("honda");
        vowels.add("toyota");


        averageVowels(vowels);
    }

    public static void averageVowels(ArrayList<String> vowels) {

        System.out.println(vowels);

        int number = 0;

        for (int i = 0; i < vowels.size(); i++)
        {
            if (vowels.get(i).contains("a") || vowels.get(i).contains("e") || vowels.get(i).contains("i") ||vowels.get(i).contains("o") || vowels.get(i).contains("u"))
            {
                number++;
            }
        }
        System.out.println("a count: " +number);
        System.out.println("e count: " +number);
        System.out.println("i count: " +number);
        System.out.println("o count: " +number);
        System.out.println("u count: " +number);
    }
}

Upvotes: 0

Views: 7443

Answers (5)

Nagakishore Sidde
Nagakishore Sidde

Reputation: 2737

The following implementation will be efficient. Maintaining a single char array of size 256 would be good enough, which works not only for vowels but for any ASCII character.

import java.util.*;

public class Vowels {

public static void main(String[] args) {

    ArrayList<String> vowels = new ArrayList<String>();

    vowels.add("mitsubishi");
    vowels.add("subaru");
    vowels.add("nissan");
    vowels.add("honda");
    vowels.add("toyota");


    averageVowels(vowels);
}

public static void averageVowels(ArrayList<String> vowels) {

    System.out.println(vowels);
    int[] chars = new int[256];
    int number = 0;

    for (int i = 0; i < vowels.size(); i++)
    {
        for (char c : vowels.get(i).toCharArray()) {
            chars[c]++;
        }
    }
    System.out.println("a count: " +chars['a']);
    System.out.println("e count: " +chars['e']);
    System.out.println("i count: " +chars['i']);
    System.out.println("o count: " +chars['o']);
    System.out.println("u count: " +chars['u']);
}
}

Upvotes: 0

Master Slave
Master Slave

Reputation: 28519

You can do without any loops, quite easily so

public static void averageVowels(ArrayList<String> vowels) {
    System.out.println(vowels);
    String arrayToString = vowels.toString();
    int length = arrayToString.length();
    System.out.println("a count: " + (length - arrayToString.replace("a", "").length()));
    System.out.println("e count: " + (length - arrayToString.replace("e", "").length()));
    System.out.println("i count: " + (length - arrayToString.replace("i", "").length()));
    System.out.println("o count: " + (length - arrayToString.replace("o", "").length()));
    System.out.println("u count: " + (length - arrayToString.replace("u", "").length()));
}

It prints

[mitsubishi, subaru, nissan, honda, toyota]
a count: 4
e count: 0
i count: 4
o count: 3
u count: 3

Upvotes: 1

lightning_missile
lightning_missile

Reputation: 2992

This

    if (vowels.get(i).contains("a") || vowels.get(i).contains("e") || vowels.get(i).contains("i") ||vowels.get(i).contains("o") || vowels.get(i).contains("u"))

only checks if the string contains a, e, i, o, or u. If it found one of these, it won't bother to check the rest of the string. And since you are using ||, in your if statement, it will not evaluate the next conditions if the current condition is already true, so it will proceed to increment number. If you want to find the number of each vowel, One way is to loop through the string by turning it into a char array and check if a character is a vowel. Then you should create a counter for each vowel and a separated if/switch statement for each. For example with an if statement.

int aCount = 0;
int eCount = 0;
int iCount = 0;
int oCount = 0;
int uCount = 0;
for (int i = 0; i < vowels.size(); i++) {
    for (char c : vowels.get(i).toCharArray()) {
    if (c == 'a') {
        aCount++;
    } else if (c == 'e') {
        eCount++;
    } else (c == 'i') {
        iCount++;
    } else if (c == 'o') {
        oCount++;
    } else if (c == 'u') {
        uCount++;
    } else {
        continue;
    }
}
}

Upvotes: 0

Kevin Klute
Kevin Klute

Reputation: 458

Make 5 different variables to count the number of the vowel. For example numbera, number e etc. Then you will need 5 if statements (one for each vowel) each of which will increase its respective count by 1.

for (int i = 0; i < vowels.size(); i++)
for (int j = 0; j<vowels.get(j).length(); j++) { 
if (vowels.get(i).charAt('a'))
    {
        numbera++;
    }
if (vowels.get(i).charAt('e'))
    {
        numbere++;
    }
if (vowels.get(i).charAt('i'))
    {
        numberi++;
    }   
if (vowels.get(i).charAt('o'))
    {
        numbero++;
    }  
if (vowels.get(i).charAt('u'))
    {
        numberu++;
    }}

Upvotes: 0

Tenfour04
Tenfour04

Reputation: 93581

You want to count five types of things, so you need five variables:

int aCount = 0;
int eCount = 0;
int iCount = 0;
int oCount = 0;
int uCount = 0;

There are many different ways you could loop through each of the words, and then each of the characters in each of the words. Here's one way:

for (int i = 0; i < vowels.size(); i++) {
    String lowerCaseWord = vowels.get(i).toLowerCase(); //get lowercase version so we don't have to check each letter twice

    for (int j=0; j<lowerCaseWord.length(); j++){  //loop through each char in the string
        char c = lowerCaseWord.charAt(j);
        if (c == 'a') aCount++;
        else if (c == 'e') eCount++;
        else if (c == 'i') iCount++;
        else if (c == 'o') oCount++;
        else if (c == 'u') uCount++;
    }
}

Upvotes: 0

Related Questions