Halo
Halo

Reputation: 55

Checking if a String is a number using switch

I have to make a program which tells if a String that I type in my keyboard is a number, by using a switch. I know how to do it with try and catch, but I don't know how to do it with switch.

Any tips?

Upvotes: 2

Views: 2625

Answers (4)

Pedro Otero
Pedro Otero

Reputation: 334

I came up with a shorter code BUT it uses regular expressions, which if Halo is just starting with Java, he may have not seen that topic yet. But then it answers the question too so here it is:

Scanner scanner = new Scanner(System.in);
String expression = scanner.nextLine();
String matches = new Boolean(expression.matches("\\d+")).toString();
switch (matches) {
case "true":
    System.out.println("IT'S a number");
    break;
case "false":
    System.out.println("NOT a number");
}
scanner.close();

Upvotes: 0

Halo
Halo

Reputation: 55

This is the solution I got asking to some classmates and thinking it quietly.

public static void main(String[] args) {
    // TODO Auto-generated method stub 


    Scanner entry = new Scanner(System.in);
    String myNumber;
    int tf;
    myNumber = entry.next();

    try {
        Double.parseDouble(myNumber);
        tf = 1;
    }

    catch (Exception e) {
        tf = 0;
    }


    switch(tf) {

    case 1:
        System.out.println("Is a number");
    break;

    default:
        System.out.println("No es un número");
        break;

    }




}

Thanks to the community for being so nice!

Upvotes: 0

OldCurmudgeon
OldCurmudgeon

Reputation: 65851

You would need to check each characer in the String. Something like this would probably work.

static boolean isNumber(String s) {
    if (s == null) {
        // Debatable.
        return false;
    }
    int decimalCount = 0;
    for (int i = 0; i < s.length(); i++) {
        switch (s.charAt(i)) {
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
                // These are all allowed.
                break;
            case '.':
                if (i == 0 || decimalCount > 0) {
                    // Only allow one decimal in the number and not at the start.
                    return false;
                }
                decimalCount += 1;
                break;
            default:
                // Everything else not allowed.
                return false;
        }
    }
    return true;
}

Upvotes: 4

Jordi Castilla
Jordi Castilla

Reputation: 26981

Up to Java7 you can use switch(String) statement.


But here you have enough with switch(int) and a little workaround:

public static void main(String[] args) throws Exception {
    String a = "2";

    switch (Integer.parseInt(a)) {
    default: 
        System.out.print("is a number");
        break;
    }
}   

Upvotes: 2

Related Questions