黑马程序员技术交流社区

标题: 字符串和int类型转换的异常处理问题 [打印本页]

作者: 王月    时间: 2012-7-18 11:39
标题: 字符串和int类型转换的异常处理问题
本帖最后由 王月 于 2012-7-18 16:33 编辑

Integer.parseInt("234df")这句话会引起 java.lang.NumberFormatException这样一个运行时异常,
而Integer.parseInt("2347589436783657834")也会引起这样的异常。


我用了自定义异常,为什么输入两种错误的值只运抓住了NumberFormatException这个异常,怎么分类处理这些异常呢 ,就是输入非法字符是一个异常,输入超出int范围的值时又是一个异常。
        public static int getConversion(String str) {
                int i = 0;

                try {
               
                        //        i = Integer.parseInt(str);
                        if(Integer.parseInt(str)<Integer.MAX_VALUE){
                                i = Integer.parseInt(str);
                        }
                        if(Integer.parseInt(str)>Integer.MAX_VALUE)
                        {
                                throw new yuejieException();
                        }
                        
                } catch (yuejieException n) {

                        System.out.println("数值太大,超出范围");
                }
                catch (NumberFormatException n) {

                        System.out.println("输入有误,含有非数字字符");
                }

                return i;


作者: 李伟    时间: 2012-7-18 11:47
                                               
                                           int x = 0;
                        try
                        {
                                x = Integer.parseInt(s);
                        }
                        catch (Exception e) //把需要处理的不同情况放到catch语句里面
                        {
                                char[] chs = s.toCharArray();
                                if(chs.length==0)
                                        System.out.println("没有任何内容!");
                                else if(chs[0]=='-')
                                {
                                        for(int j=1;j<chs.length;j++)
                                        {
                                                if (chs[j] < '0' || chs[j] > '9')
                                                {
                                                        System.out.println("有非数字字符情况!");
                                                        break;
                                                }
                                                if (j == chs.length - 1)
                                                        System.out.println("数字位数太大了!");
                                        }
                                }
                                else
                                {
                                        for (int i = 0; i < chs.length; i++)
                                        {
                                                if (chs < '0' || chs > '9')
                                                {
                                                        System.out.println("有非数字字符情况!");
                                                        break;
                                                }
                                                if (i == chs.length - 1)
                                                        System.out.println("数字太大了!");
                                        }
                                }
                        }

作者: 孙新强    时间: 2012-7-18 12:01
主要是int类型的取值范围的原因
1、首先把str转换为long型 与Integer.MAX_VALUE比较 要不然 还没有比较转换过程中就会报错了
2、在你的这程序中 改变一下 try语句块中的两个if判断语句块顺序   
修改程序如下:
public class Test {
         public static int getConversion(String str) {
         int i = 0;

         try {
         
                 //        i = Integer.parseInt(str);
               
                 if(Long.parseLong(str)>Integer.MAX_VALUE)
                 {
                         throw new yuejieException();
                 }
                 if(Integer.parseInt(str)<Integer.MAX_VALUE){
                     i = Integer.parseInt(str);
             }
         } catch (yuejieException n) {

                 System.out.println("输入有误,");
         }
         catch (NumberFormatException n) {

                 System.out.println("输入有误,含有非数字字符");
         }

         return i;
         }
       
}

作者: 王月    时间: 2012-7-18 16:31
李伟 发表于 2012-7-18 11:47
int x =  ...

这样做可以成功,我是想如果用处理异常的方式是不是更严谨一点。
我是用了一个if语句的判断和一个异常,来处理那两种错误的方式的。
作者: 王月    时间: 2012-7-18 16:32
孙新强 发表于 2012-7-18 12:01
主要是int类型的取值范围的原因
1、首先把str转换为long型 与Integer.MAX_VALUE比较 要不然 还没有比较转换 ...

已经解决了,三克油
作者: John1211    时间: 2016-3-2 13:38

高手,佩服!!!相当精辟啊!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2