论坛首页 Java企业应用论坛

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

浏览 10072 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2011-01-02  
gdpglc 写道
cantellow 写道
引用
这是我最后一贴。 投我隐藏的你记住,我发过这贴。当你写代码时,用了异常做判断,你应该想起这贴,也许你该脸红。

想当初,我为了“查看某个类是否存在”也用了ClassNotfoundException的异常来判断,但是前提是我没有想出更好的方法来代替它。但是!!写一个判断String是不是数字的逻辑有N多种方法,为什么我偏要用你那种粗暴的方法???

我就投你隐藏了,如果我没找到好的方法,我会用异常做判断,但是我永远不会用异常来判断一个string是不是数字!!!


我说的就是,用异常可以做判断,谢谢你支持我。其它的不想说了...

O_O,*^o^*。

0 请登录后投票
   发表时间:2011-01-02  
gdpglc 写道
kjj 写道
异常判断又不是你发明的,别人的意思都没弄懂就摆大架子,别人就算用异常判断又咋了,你是指定标准的啊,投你隐藏不是因为你的帖子意见正确与否,而是你太嚣张,再说异常判断并不是首选好方法,你这样大张旗鼓,只会误导新人,一派混乱。。。。
无知不可怕,无知而且固执,不听取别人意见,还大言不惨,你是当官的吧!!!


可是许多人拿出来 effective java 说用异常判断不行。又说性能如何如何...

也同样谢谢你支持我。
我仅仅在说技术没其它的。如果能看懂我在说什么,只会对人有益何来误导...

我的言论均来自我的多年实践...其它的不想说了..累!



无所谓对与错,实现功能就是好的。
也没有哪一种方式是绝对的权威。
自己写一个判断函数应该是最快的,性能是用异常的5倍左右,但是使用异常的性能却是使用正则的20倍左右,怎么样都可以。
我到是觉得,使用异常来判断,代码的复杂程度比自己写函数简单得多。
使用正则,代码简洁,但性能却又比异常相差太多(*^o^*,几千万次的测试,现实中不会真这么狠吧),异常居中,从性能和代码综合上来说,异常算是个不错的办法。

如果你的这段代码使用的是正则str.matches("[-+]?\\d+")来做的话,我估计不会有太多人说什么了。

不过感觉你误会了大家的意思,绝大多数的人只是推荐怎么做,而不是指你这么做不对。
0 请登录后投票
   发表时间:2011-01-02   最后修改:2011-01-02
算了,不扯了。
0 请登录后投票
   发表时间:2011-01-02   最后修改:2011-01-02
贴主删贴,我不便再引用之..
0 请登录后投票
   发表时间:2011-01-02   最后修改:2011-01-02
但是异常用多了确实会出现不可预知的错误,我们公司的网站就经历过。最后服务器直接当机。

勿以恶小而为之,勿以善小而不为。

只说这么多了,有不便之处请大家多多理解。讨论归讨论,朋友归朋友。
0 请登录后投票
   发表时间:2011-01-02  
ouchxp 写道
说个验证日期的问题...
大家觉得应该怎么验证???
String eL= "^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]? ((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))";   
Pattern p = Pattern.compile(eL);   
Matcher m = p.matcher(value);   
boolean flag = m.matches();

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d");
        try {
            Date d = sdf.parse(dateStr);
        } catch (ParseException e) {
            return false;
        }


请问大家都用了哪个????

如果论坛能开个投票就好了.吵来吵去的没劲....
0 请登录后投票
   发表时间:2011-01-02   最后修改:2011-01-02
woaimengzhaojun 写道
但是异常用多了确实会出现不可预知的错误,我们公司的网站就经历过。最后服务器直接当机。

勿以恶小而为之,勿以善小而不为。


我的确遇到过,服务器当机。不过原因是因为 内存泄露

你能不能具体说说 怎么因为异常用多了就出现的不可预知的错误的? 这个听着就悬?

勿以恶小而为之,勿以善小而不为。


唉! 你要是能搞清什么是 软件设计中的善恶也行。 就怕什么所谓的不可预知,是想象出来的...

善恶更多的是你自已想的,软件不是靠想象的。我实在不能以善恶来衡量软件,太不专业...太悬了...

0 请登录后投票
   发表时间:2011-01-02  
ouchxp 写道
说个验证日期的问题...
大家觉得应该怎么验证???
String eL= "^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]? ((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))";   
Pattern p = Pattern.compile(eL);   
Matcher m = p.matcher(value);   
boolean flag = m.matches();

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d");
        try {
            Date d = sdf.parse(dateStr);
        } catch (ParseException e) {
            return false;
        }


请问大家都用了哪个????


如果是客户端运行的程序,我也是经常这样处理的.
但是如果是服务端代码,还是会有些许不同的处理的,因为new SimpleDateFormat 不算是很轻量级的过程,牵扯的处理不少,而SimpleDateFormat 又不是线程安全的,所以常常是把SimpleDateFormat存在ThreadLocal中,做到在同线程内的.而且,据我所知,很多的开源项目都选择了这样处理这个问题.所以说,大家还是愿意在性能与简洁中都兼顾些的.
所以说不从一种偏执走向另外一种偏执,才是好的选择.

另外,对Exception 还是那句话,每次使用的时候,还是尽量仔细考虑一下为妙.记得IBM的的一片文章很量化的讨论了这个问题,增加try catch 本身性能影响实际上非常小,但是一旦Exception 命中,性能会差10倍以上,所以那个文章的结论是,在一些时刻可以使用Exception 去处理程序的的流转,但是最好是绝大部分的情况都不会命中Exception.这样才又经济又简洁.
而且,坦白来说,虽然我没查,但是我相信如果你愿意,一定可以找到一个高效的库去处理这个判断日期格式的.

另外,说到java和c的效率.最近看到的一个文章是采访google的一位超级大牛(忘了是谁了),他说google内部现在java用的是越来越多,因为java运行起来和c差距非常小.只有在涉及上万台机器并发的基础构建上才会使用c甚至汇编,因为即便是很小的差距在海量并发时也会表现出显著的差异.所以,对于我们一般的应用来讲java与c的速度差异在运行层面上,没什么本质区别.
另外,在那篇采访中超级大牛还透露,google内部使用的java ide是Intellij IDEA,尽管他还是不习惯用,不过他觉得Intellij IDEA确实很棒.







0 请登录后投票
   发表时间:2011-01-02   最后修改:2011-01-02
超级大牛(忘了是谁了),

Joshua Bloch ?
0 请登录后投票
   发表时间:2011-01-02  
在这贴处:http://www.iteye.com/topic/857722
发现这个地址:http://www.iteye.com/topic/2038,没想到当年的牛人,已有关于此贴问题的讨论。现在还没时间看完,发在这里给大家参考。
0 请登录后投票
论坛首页 Java企业应用版

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