如何以更具体的方式处理NumberFormatException?

时间:2013-01-10 07:00:30

标签: java exception-handling validation numberformatexception

我想以更具体的方式处理NumberFormatException。 当输入以下内容时,当它尝试分配除整数之外的任何内容时会发生此异常:

  1. 字符串
  2. 字符
  3. 空输入
  4. 双号
  5. 根据输入的内容,我想显示正确的信息,例如

      

    您已输入字符串,请输入一个整数

      

    值不能为空,请输入整数值

    以下代码以一般方式捕获NumberFormatException

    我想知道是否有办法包含更多的catch子句。

        import java.util.Scanner;
    
        public class TestException {
    
            static int input;
            static Scanner scan = new Scanner(System.in);
    
            public static void main(String[] args) {
                System.out.println("Enter an integer number: ");
    
                try {
                    input = Integer.parseInt(scan.next());
                    System.out.println("You've entered number: " + input);
                } catch (NumberFormatException e) {
                    System.out.println("You've entered non-integer number");
                    System.out.println("This caused " + e);
                }
            }
        }
    

5 个答案:

答案 0 :(得分:4)

首先从用户那里获取输入,然后尝试将其转换为整数。

    static int input;
    static Scanner scan = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.println("Enter an integer number: ");

        String inputString = scan.next();

        try {
            input = Integer.parseInt();
            System.out.println("You've entered number: " + input);
        } catch (NumberFormatException e) {
            if(inputString.equals("") || inputString == null) {
                System.out.println("empty input"); 
            } else if(inputString.length == 1) {
                System.out.println("char input");
            } else {
                System.out.println("string input");
            }
        }
    }

答案 1 :(得分:2)

您必须使用if-else构造在catch区块内指定您的场景。

请参阅以下代码:

String inString = null;
try 
{
    iString = scan.next().trim();
    input = Integer.parseInt(inString);
    System.out.println("You've entered number: " + input);
} 
catch (NumberFormatException e) 
{
    if(inString.equals("")
    {
        System.out.println("You've entered empty string.");
    }
    else if(inString.length() == 1)
    {
        System.out.println("You've entered a single char");
    }
    else
    {
        System.out.println("You've entered non-intereger number");
    }
    System.out.println("This caused " + e);
}

答案 2 :(得分:0)

如果将输入解析为整数值导致异常,您可以对输入进行更多测试,如下所示:

String scanned = null
try {
   scanned = scan.next();
   input = Integer.parseInt(scanned);
   System.out.println("You've entered number: " + input);
} catch (NumberFormatException e) {
   if (scanned == null || scanned.isEmpty()) {
      System.out.println("You didn't enter any value");
   } else if (scanned.length() == 1)
      System.out.println("You entered a single char which is not a number");
   }
   // and more tests, you can even try to parse as Double
}

答案 3 :(得分:0)

String aString = null;
    aString = scan.next().trim();   
    System.out.println("You've entered number: " + aString);
    if("".equals(aString.trim())){
       System.out.println("You have entered an Empty String");
     }else if(!isNumber(aString) && aString.length()==1){
       System.out.println("You have entered a Character");
     }else if(!isNumber(aString) && aString.length()>1){
       System.out.println("You have entered a String");
     }else if(isNumber(aString)){
       int input = Integer.parseInt(aString.replaceAll(",",""));
       System.out.println("You have entered a correct Number"+input); 
     }

   private boolean isNumber(String s){
        return s.matches("[0-9]+(,[0-9]+)*,?");
    }

答案 4 :(得分:0)

public static int isInt(){
        boolean ok=false;
        int b=1;
        do{
            String next = sc.next();
            int a=b;
            try{
             a = Integer.parseInt(next);        
            }catch(Exception e){

                System.out.println("Invalid Option...");
                continue;
            }


            if(a==1){b=a;ok=true;}
            else if(a==2){b=a;ok=true;}
            else if(a==3){b=a;ok=true;}

        }while(!ok);
    return b;
}