【讨论】java判断是否是数字,并转换为int类型。

daichangfu 2011-11-01 10:03:42
以下是我的代码:

	/**
* 判断是否是Integer类型
* @author daichangfu
* @param str
* @return
*/
public boolean isNumber(String str){
if(str!=null&&!"".equals(str.trim())){
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
Long number = 0l;
if(isNum.matches()){
number=Long.parseLong(str);
}else{
return false;
}
if(number>2147483647){
return false;
}
}else{
return false;
}
return true;
}


当我的URL参数从前台传过来的时候,我需要在后台先判断是否是数字,然后对其进行类型转换,我们头要求不论客户在地址栏怎么输入参数都不能报错。

但是我判断了参数都是数字,但是它的大小超过了int的长度会报错,所以我把它先转换成了Long型,然后判断,但是如果它输入的大小超过了Long一样会报错啊....。 请问大家,这个我改怎么办?
...全文
647 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿杰心路历程 2011-11-01
  • 打赏
  • 举报
回复
"0000000000000000000000001"
按照你上面的方法返回时false对吧?
是不是应该截取掉首位 直到到首位不是0?
coooliang 2011-11-01
  • 打赏
  • 举报
回复

boolean b = org.apache.commons.lang.math.NumberUtils.isNumber("123");

只需要引入 commons-lang-x.x.jar.在struts和spring的lib下都有。
draem0507 2011-11-01
  • 打赏
  • 举报
回复

public static boolean isNumber(String str){


if(str==null||str.length()==0)
return false;

char c[]=str.toCharArray();
for (int i = 0; i < c.length; i++) {
if(!Character.isDigit(c[i])){
return false;
}
}
//到此确认是数字
//其他操作
return false;
}


daichangfu 2011-11-01
  • 打赏
  • 举报
回复

/**
* 判断是否是Integer类型
* @author daichangfu
* @param str
* @return
*/
public boolean isNumber(String str){
if(str!=null&&str.length()<11&&!"".equals(str.trim())){
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
Long number = 0l;
if(isNum.matches()){
number=Long.parseLong(str);
}else{
return false;
}
if(number>2147483647){
return false;
}
}else{
return false;
}
return true;
}

public boolean isNumber2(String str){
try {
Integer.parseInt(str);
} catch (NumberFormatException e) {
return false;
}
return true;
}


大家觉得这两个方法,哪个比较好?
daichangfu 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gukuitian 的回复:]

你只要判断的话,很容易,直接number=Long.parseLong(str);

try catch一下,有异常,return false

否则return true
[/Quote]

头说了,可以用catch,但是不能让它用来捕捉已知的错误...
daichangfu 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 daichangfu 的回复:]

引用 5 楼 hanjiaming 的回复:

超过长度直接return false。关于false后具体怎么操作,看你们头的了


Java code
/**
* 判断是否是Integer类型
* @author daichangfu
* @param str
* @return
*/
public boolean ……
[/Quote]

我在struts2的action中为变量赋值的时候这样使用,大家看看行吗?

	public int getEpid() {
return epid;
}

public void setEpid(String epid) {
if(this.isNumber(epid)){
this.epid = Integer.parseInt(epid);
}else{
this.epid = 0;
}
}
gukuitian 2011-11-01
  • 打赏
  • 举报
回复
你只要判断的话,很容易,直接number=Long.parseLong(str);

try catch一下,有异常,return false

否则return true
daichangfu 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hanjiaming 的回复:]

超过长度直接return false。关于false后具体怎么操作,看你们头的了
[/Quote]

	/**
* 判断是否是Integer类型
* @author daichangfu
* @param str
* @return
*/
public boolean isNumber(String str){
if(str!=null&&str.length()<11&&!"".equals(str.trim())){
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
Long number = 0l;
if(isNum.matches()){
number=Long.parseLong(str);
}else{
return false;
}
if(number>2147483647){
return false;
}
}else{
return false;
}
return true;
}


这样如何?
良才2015 2011-11-01
  • 打赏
  • 举报
回复
超过长度直接return false。关于false后具体怎么操作,看你们头的了
daichangfu 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gukuitian 的回复:]

看你这方法的返回值,boolean,

那这个方法应该就是用了验证数据是否为可以转化为数字的;

你在里面加的类型转化有什么用?

至于说转化时有错,那得看你的需求,过长的怎么办?是通知用户有错,还是直接处理。大数可以用BigDecimal
[/Quote]

嗯,是的,因为有很多参数都是int类型,所以我加了一个通用的判断方法,如果判断通过了,我在进行转换。
有没有什么方法可以判断字符串是否超过int类型的大小的...
daichangfu 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 war3334444 的回复:]

用JS限定输入栏输入长度行不行啊?
[/Quote]


用户直接是url上手动输入参数,根本不调用JS就提交到后台了。
gukuitian 2011-11-01
  • 打赏
  • 举报
回复
看你这方法的返回值,boolean,

那这个方法应该就是用了验证数据是否为可以转化为数字的;

你在里面加的类型转化有什么用?

至于说转化时有错,那得看你的需求,过长的怎么办?是通知用户有错,还是直接处理。大数可以用BigDecimal
盖世小蜗牛 2011-11-01
  • 打赏
  • 举报
回复
用JS限定输入栏输入长度行不行啊?

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧