Finding the number of vowels in a string I'm new to Java and is trying to solve the beginners problem of finding out the number of vowels in a string. I was just wondering if there is any alternatives to any of the steps that can improve efficiency as well as simplicity.

import java.util.Arrays;
import java.util.Scanner;


public class CountVowels{

    public static void main(String[] args) {
        Scanner sc1 = new Scanner(System.in);
        String userInput = sc1.next();
        sc1.close();
        CountVowels cv1 = new CountVowels();
        int numberOfVowels = cv1.countingVowels(userInput);
        System.out.println(numberOfVowels);
    }


    public int countingVowels(String s1){
        String lowerCaseString = s1.toLowerCase();
        int vowelCount = 0;
        for (int i = 0; i &lt; lowerCaseString.length(); ++i){
            Character charCharacter = lowerCaseString.charAt(i);
            char[] vowels = {'a', 'e', 'i', 'o', 'u'};
            if(Arrays.binarySearch(vowels, charCharacter) &gt;= 0){
                vowelCount += 1;
            }
        }
        return vowelCount;
    }
}
Outline

In this case, instantiating a new CountVowels() is overkill.  all you need is a function.

As a rule, classes should be named as nouns.  A better name for the class would be VowelCounter.

public class VowelCounter {
    public static int vowelCount(String s) {
        …
    }

    public static void main(String[] args) {
        …
        System.out.println(vowelCount(userInput));
    }
}


Implementation

Your countingVowels() function is fine, but could be simpler.

public static int vowelCount(String s) {
    int count = 0;
    for (char c : s.toLowerCase().toCharArray()) {
        if ("aeiou".indexOf(c) &gt;= 0) {
            count++;
        }
    }
    return count;
}


Specifically, note:


Using an enhanced for loop is less tedious than a counting loop.
Avoid boxed types such as Character, when a primitive char will do.
For such a short array, a binary search is overkill.




Your main() is also OK, but I would write it this way:

public static void main(String[] args) {
    try (Scanner scanner = new Scanner(System.in)) {
        String userInput = scanner.next();
        System.out.println(vowelCount(userInput));
    }
}


In particular:


A Scanner is AutoCloseable, so a try-with-resources block is tidier than calling close() on it manually.
There doesn't seem to be much point in the …1 suffix on your variable names sc1, cv1, and s1.