Java Program to test if a character is uppercase/lowercase/number/vowel

117,833

Solution 1

If it weren't a homework, you could use existing methods such as Character.isDigit(char), Character.isUpperCase(char) and Character.isLowerCase(char) which are a bit "smarter", because they don't operate only in ASCII, but also in various charsets.

static final char[] VOWELS = { 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U' };

static boolean isVowel(char ch) {
    for (char vowel : VOWELS) {
        if (vowel == ch) {
            return true;
        }
    }
    return false;
}

static boolean isDigit(char ch) {
    return ch >= '0' && ch <= '9';
}

static boolean isLowerCase(char ch) {
    return ch >= 'a' && ch <= 'z';
}

static boolean isUpperCase(char ch) {
    return ch >= 'A' && ch <= 'Z';
}

Solution 2

You don't need a for loop in your code.

Here is how you can re implement your method

  • If input is between 'A' and 'Z' its uppercase
  • If input is between 'a' and 'z' its lowercase
  • If input is one of 'a,e,i,o,u,A,E,I,O,U' its Vowel
  • Else Consonant

Edit:

Here is hint for you to proceed, Following code snippet gives int values for chars

System.out.println("a="+(int)'a');
System.out.println("z="+(int)'z');
System.out.println("A="+(int)'A');
System.out.println("Z="+(int)'Z');

Output

a=97
z=122
A=65
Z=90

Here is how you can check if a number x exists between two numbers say a and b

// x greater than or equal to a and x less than or equal to b
if ( x >= a && x <= b ) 

During comparisons chars can be treated as numbers

If you can combine these hints, you should be able to find what you want ;)

Solution 3

In Java : Character class has static method called isLowerCase(Char ch) ans isUpperCase(Char ch) , Character.isDigit(Char ch)gives you Boolean value, base on that you can easily achieve your task

example:

String abc = "HomePage";

char ch = abc.charAt(i); // here i= 1,2,3......

if(Character.isLowerCase(ch))
{
   // do something :  ch is in lower case
}

if(Character.isUpperCase(ch))
{
   // do something : ch is in Upper case
}

if(Character.isDigit(ch))
{
  // do something : ch is in Number / Digit
}

Solution 4

Some comments on your code

  • why would you want to have 2 for loops like for(i='A';i<='Z';i++), if you can check this with a simple if statement ... you loop over a whole range while you can simply check whether it is contained in that range
  • even when you found your answer (for example when input is A you will have your result the first time you enter the first loop) you still loop over all the rest
  • your System.out.println("Lowercase"); statement (and the uppercase statement) are placed in the wrong loop
  • If you are allowed to use it, I suggest to look at the Character class which has for example nice isUpperCase and isLowerCase methods

I leave the rest up to you since it is homework

Share:
117,833
Prnth
Author by

Prnth

Updated on July 09, 2022

Comments

  • Prnth
    Prnth almost 2 years

    As I said before, how do I test if the entered character is one of the parameters? I've written this code, but it doesn't seem to run very well(or at all), no errors, however. Also, I need to use the basic code I've used here. Its for school and we lose points if we use things they haven't taught us (darn school).

    class doody
     {
      public static void main(String[] args)
      { char i;
        char input='D';
    
        for(i='A';i<='Z';i++)//check if uppercase
        {
            if(input==i){
                System.out.println("Uppercase");
                switch(input){
                case 'A':
                case 'E':
                case 'I':
                case 'O':
                case 'U':
                    System.out.println("Vowel"); break;
                default: System.out.println("Not a vowel"); break;}
                }
    
            for(i='a';i<='z';i++)//check if lowercase
            {
                if(input==i){
                    System.out.println("Lowercase");
                    switch(input){
                    case 'a':
                    case 'e':
                    case 'i':
                    case 'o':
                    case 'u':
                    System.out.println("Vowel"); break;
                    default: System.out.println("Not a vowel"); break;
                    }}
    
    
            for(i='0';i<='9';i++)//check if number
            {
                if(input==i)
                    System.out.println("Number");
            }
    
        }
    
    }}}
    

    Edit: Here is some code I threw together today. Much simpler. I don't know why this didn't occur to me earlier. It was probably because I was groggy, it was late.

    class doody
    {
     public static void main(String[] args)
     {  
        char input='$';//input here.
    
        boolean lorn=false;
        if(input>='a'&&input<='z')
            {System.out.println("Lowercase");
                lorn=true;
            if(input=='a')System.out.println("Vowel.");
            if(input=='e')System.out.println("Vowel.");
            if(input=='i')System.out.println("Vowel.");
            if(input=='o')System.out.println("Vowel.");
            if(input=='u')System.out.println("Vowel.");
            }
    
        if(input>='A'&&input<='Z')
            {System.out.println("Uppercase");
                lorn=true;
            if(input=='A')System.out.println("Vowel.");
            if(input=='E')System.out.println("Vowel.");
            if(input=='I')System.out.println("Vowel.");
            if(input=='O')System.out.println("Vowel.");
            if(input=='U')System.out.println("Vowel.");
            }
    
        if(input>='0'&&input<='9')
            {
                lorn=true;
                System.out.println("Number");
            }
    
        if(lorn==false)System.out.println("It is a special character");
     }
    }
    
  • Prnth
    Prnth over 12 years
    How do I test if it is between A and Z? I'm a Java noob, you see.
  • Prnth
    Prnth over 12 years
    How do I test if it is within a range? Do I need to use one of those...array things? Thanks for the "System out in the wrong loop" thing. I'll fix that now.
  • Prnth
    Prnth over 12 years
    I know about that, but we haven't been taught it in school. We have to stick to what the teacher has taught us. I lost heaps of marks in the exams for writing things the teacher hadn't taught us.
  • JB Nizet
    JB Nizet over 12 years
    You already do it: for(i='A';i<='Z'. i starts with A, and the loop continues while i is lower than (or equal to) Z.
  • MozenRath
    MozenRath over 12 years
    then i think you should use 2 separate booleans to set the properties of uppercase/lowercase and consonant/vowels then do a print based on those booleans
  • Prnth
    Prnth over 12 years
    Great idea, good sir. I'm going to bed now, its late here, but I will work on it as soon as I get back from school tomorrow, and put an updated version here.
  • Voo
    Voo over 12 years
    @JB I can understand why you wouldn't want to confuse him and keep with his approach, but I think we should tell beginners their obvious problems and give them better solutions. The for-if anti pattern isn't something even beginners should get used to.
  • JB Nizet
    JB Nizet over 12 years
    This isn't my point. He asked how to test if a char is between A and Z, and I told him that he already did that in his original code, since its loop uses such a comparison already.