论坛首页 Java企业应用论坛

验证String是不是整数,用异常作判断怎么了!

浏览 13420 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2010-12-31   最后修改:2010-12-31
mercyblitz 写道
gdpglc 写道
贴子写的是我的经验。不是技术的词,别在这里发。你可以直接投隐藏。我能理解你的行为。



。。。

大多数都是题外话,择善而从!

无语了,好帖子我会投良好以上地,但是我一般不投隐藏和新手,打击你继续写的动力。

我看过很多年轻人知道一点技术就觉得怎么样,工作经验不能说明问题。别人5年好,10年好,比的不是细节。

往往别人投贴子,总要想想自己的原因,别老说别人怎么样。


如果要聊正题的话,哪几种设置去测试一下,再看看效果!

没有任何人说你的方案不好,只是别人不习惯这么干!


你这么说我也不好说什么。不过,我的本意只是想把这6行代码说明白。有些问题,是靠思考的。测试可以得到一个结果,不同的理解却有不同的结论...
这里有一个权衡的问题... 可是很多人,只看表面...我只是想把这个意思表达出来...
0 请登录后投票
   发表时间:2010-12-31  
gdpglc 写道
mercyblitz 写道
gdpglc 写道
贴子写的是我的经验。不是技术的词,别在这里发。你可以直接投隐藏。我能理解你的行为。



。。。

大多数都是题外话,择善而从!

无语了,好帖子我会投良好以上地,但是我一般不投隐藏和新手,打击你继续写的动力。

我看过很多年轻人知道一点技术就觉得怎么样,工作经验不能说明问题。别人5年好,10年好,比的不是细节。

往往别人投贴子,总要想想自己的原因,别老说别人怎么样。


如果要聊正题的话,哪几种设置去测试一下,再看看效果!

没有任何人说你的方案不好,只是别人不习惯这么干!


你这么说我也不好说什么。不过,我的本意只是想把这6行代码说明白。有些问题,是靠思考的。测试可以得到一个结果,不同的理解却有不同的结论...
这里有一个权衡的问题... 可是很多人,只看表面...我只是想把这个意思表达出来...


这个没有办法,精益求精本来就不是必需的,所以失望再所难免!

建议大家不要再投隐藏啦,技术帖子还是做技术,别人身攻击或者谈政治,呵呵!


0 请登录后投票
   发表时间:2010-12-31  
哈哈,大家还是投吧,不过我并没投降。这话又要挨砖了,不过这贴,我不打算再发言了。
谢谢楼上的话,让我很温暖,还有那位投良好的仁兄。
0 请登录后投票
   发表时间:2010-12-31  
看看common-lang的StringUtils中的实现,优秀的代码大家应该没什么意见
 public static boolean isNumeric(String str) {
        if (str == null) {
            return false;
        }
        int sz = str.length();
        for (int i = 0; i < sz; i++) {
            if (Character.isDigit(str.charAt(i)) == false) {
                return false;
            }
        }
        return true;
    }

Integer中的public static int parseInt(String s, int radix)只是包含了大量的检测代码,然后实现和上面代码雷同,个人认为能捕获的异常一定要捕(非RuntimeException),能够用正常代码处理的就不要使用异常,不然既会影响性能,又不符合异常机制的设计初衷
0 请登录后投票
   发表时间:2010-12-31  
Integer中的public static int parseInt(String s, int radix)只是包含了大量的检测代码,然后实现和上面代码雷同,个人认为能捕获的异常一定要捕(非RuntimeException),能够用正常代码处理的就不要使用异常,不然既会影响性能,又不符合异常机制的设计初衷
---------------------------------------
actually LZ's case might be one of the 异常机制的设计初衷.

but it's a danguous way and might cause potential problems. so it's not for jr developers.
0 请登录后投票
   发表时间:2010-12-31  
javarubypython 写道
不明白楼主怎么想的,写个正则不是更好吗?

性能最好。就算不考虑性能,从代码上来说也是又少又优雅。软件业门坎再低,也不能连个正则都不会或者不想写吧。


in fact, 正则 is only designed to parse specific string. Itself is either not easy to write or to understand.

even for a 正则 wrote by you. when you look at it after several month, you probably will say: what the f*ck is this?
3 请登录后投票
   发表时间:2010-12-31  
gdpglc 写道
javarubypython 写道
不明白楼主怎么想的,写个正则不是更好吗?

性能最好。就算不考虑性能,从代码上来说也是又少又优雅。软件业门坎再低,也不能连个正则都不会或者不想写吧。

好象你很懂正则呀。
问个问题?

String s="abc\\def";
你能把这个字任串中的\用String的replaceAll方法换成*吗?
如果你写不出来,别来和我说正则。

我遇到过工作五年的人,仍就对正则一知半解。

你测测吧,正则和异常哪个性能好,别拍脑门。正则表达式首先要对正则进行解析,然后再进行匹配。性能最好从何说起?你也外行的可以!

既然你能接受得了异常的性能,为什么就接受不了正则的性能?至少正则可以让代码看上去更好看。
0 请登录后投票
   发表时间:2010-12-31   最后修改:2010-12-31
jackerxff 写道
看看common-lang的StringUtils中的实现,优秀的代码大家应该没什么意见
 public static boolean isNumeric(String str) {
        if (str == null) {
            return false;
        }
        int sz = str.length();
        for (int i = 0; i < sz; i++) {
            if (Character.isDigit(str.charAt(i)) == false) {
                return false;
            }
        }
        return true;
    }



也不一定,if (Character.isDigit(str.charAt(i)) == false)这一句在很多追求完美的人眼里是不足够好的
0 请登录后投票
   发表时间:2010-12-31  
楼主方法简单 门槛低 开发效率高 。

什么chatat 什么 正则判断 能拍脑袋写清楚的没几个人。

不过下面的测试回复的很有水平 很严谨 佩服

1 请登录后投票
   发表时间:2010-12-31  
gdpglc 写道
public static boolean validateInteger(String str) { 
try { 
        Integer.parseInt(str); 
     } catch (Exception ex) { 
         return false; 
     } 
     return true; 


怎么就那么多人想不开呢?
我就不明白了,用异常做判断怎么了?

那到底什么原因,说这代码不能用呢???


IcyFenix 写道

进行JIT预热
字符串为整数,验证方式1:9535717ns
字符串为整数,验证方式2:8934368ns
字符串为非整数,验证方式1:2029725263ns
字符串为非整数,验证方式2:7702305ns

不进行JIT预热
字符串为整数,验证方式1:25392935ns
字符串为整数,验证方式2:15882435ns
字符串为非整数,验证方式1:2058369758ns
字符串为非整数,验证方式2:9489115ns

如果不出现异常,那性能其实差不了多远,尤其是JIT编译了之后。但出现了异常就有两百多倍的差距,还是很客观的。


呵呵,gdpglc言语上有点吵架了
gdpglc太激动了,老实说如果是纯粹的判断,使用异常的方式非常的好!
不过按照IcyFenix的,使用for判断每一个char比较合适,我赞同
jackerxff 写道

Character.isDigit(str.charAt(i))

的判断条件

对于这个判断整数来说
楼主的方法,实际上对绝大多数系统来说根本没有任何影响!
楼主是不是因为这个被人训了,所以到此找回平衡 ^ ^
我以前遇到过多次这样的事情,什么变量要从for、while提出来因为XXXX,后来看了极限编程和重构,都说先构建易懂的,不要过早介入优化。对于这个方法,容易看懂即可。两种方法都好。

我很赞同楼主的分析:性能(时间和内存)真正出在哪儿?几ms的损失绝不是问题?
2 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics