当前位置: 首页 > news >正文

[转]Java中怎样判断一个字符串能否转成数字

原文地址:http://blog.sina.com.cn/s/blog_7bac470701014mjf.html

判断字符串是否为数字

 

//1、正则表达式
 public static boolean isNumeric1(String str){
  Pattern pattern = Pattern.compile("[0-9]*");
  return pattern.matcher(str).matches();
 }
 //2、java自带函数
 public static boolean isNumeric2(String str){
  for (int i = str.length();--i>=0;){
   if (!Character.isDigit(str.charAt(i))){
    return false;
   }
  }
  return true;
 }
 //3、正则表达式
 public static boolean isNumeric(String str){
  if(str.matches("\\d *")){
   return true;
  }else{
   return false;
  }
 }
    //4、判断ASCII码值
 public static boolean isNumeric0(String str){
  for(int i=str.length();--i>=0;){
   int chr=str.charAt(i);
   if(chr<48 || chr>57)
    return false;
  }
  return true;
 }
    //5、逐个判断str中的字符是否是0-9
 public static boolean isNumeric3(String str){
  final String number = "0123456789";
  for(int i = 0;i 
            if(number.indexOf(str.charAt(i)) == -1){  
             return false;  
            }  
  }  
  return true;
 }
    //6、捕获NumberFormatException异常
 public static boolean isNumeric00(String str){
  try{
   Integer.parseInt(str);
   return true;
  }catch(NumberFormatException e){
   System.out.println("异常:\"" + str + "\"不是数字/整数...");
   return false;
  }
 }
 
 ps:不提倡使用方法6,原因如下:
    1、NumberFormatException是用来处理异常的,最好不要用来控制流程的。  
    2、虽然捕捉一次异常很容易,但是创建一次异常会消耗很多的系统资源,因为它要给整个结构作一个快照。 
 看一下JDK源码:
 public static long parseLong(String s,int radix)  
         throws NumberFormatException  
 {  
    if(s == null){  
       throw   new   NumberFormatException("null");  
    }  
    if(radix < Character.MIN_RADIX){  
           throw new NumberFormatException("radix " + radix +
           " less than Character.MIN_RADIX");  
    }  
    if(radix > Character.MAX_RADIX){  
           throw new NumberFormatException("radix " + radix +
           " greater than Character.MAX_RADIX");  
    }  
    long result = 0;  
    boolean negative = false;
    int i = 0,max = s.length();  
    long limit;  
    long multmin;  
    int digit;
    if(max > 0){  
     if(s.charAt(0) == '-'){  
      negative = true;  
      limit = Long.MIN_VALUE;
      i++;
     }else{
      limit = -Long.MAX_VALUE;
     }  
     multmin = limit / radix;
     if(i < max){  
      digit = Character.digit(s.charAt(i++),radix);  
      if(digit < 0){
            throw new NumberFormatException(s);  
      }else{  
            result = -digit;
      }  
     }  
     while(i < max){  
      // Accumulating negatively avoids surprises near MAX_VALUE
      digit = Character.digit(s.charAt(i++),radix);  
      if(digit < 0){  
       throw new NumberFormatException(s);  
      }  
      if(result < multmin){  
       throw new NumberFormatException(s);  
      }  
      result *= radix;  
      if(result < limit + digit){  
       throw new NumberFormatException(s);  
      }  
      result -= digit;  
    }  
    }else{  
     throw   new   NumberFormatException(s);  
    }  
    if(negative){  
     if(i > 1){  
      return result;
     }else{  
      throw new NumberFormatException(s);  
     }  
    }else{  
     return   -result;  
    }  
 }  
 可以看出来jdk里也是一个字符一个字符的判断,如果有一个不是数字就抛出NumberFormatException,所以还不如这个工作由我们自己来做,还省得再抛出一次异常... 

相关文章:

  • JS组件系列——Bootstrap文件上传组件:bootstrap fileinput
  • 来自新浪同学的学习及工作心得
  • Matlab小技巧
  • [转]jmeter实战
  • sudo权限集中管理+日志审计实战
  • 网络安全技术分析
  • hdu 确定比赛名次
  • JS组件系列——Bootstrap Table 表格行拖拽
  • 将字符串转换成uniqueidentifiter类型时出错
  • 小知识~VS2012的xamarin加载失败解决
  • 从盲筹成风 看国内科技企业的喜与忧
  • Hadoop集群应用于大数据分析优势和挑战
  • Angular2组件开发—模板语法(六)
  • ubutun下安装jenkins
  • nginx-1.9.1平滑升级到nginx-1.9.7
  • 【Leetcode】101. 对称二叉树
  • [case10]使用RSQL实现端到端的动态查询
  • 10个确保微服务与容器安全的最佳实践
  • Angular2开发踩坑系列-生产环境编译
  • Java 内存分配及垃圾回收机制初探
  • JavaScript服务器推送技术之 WebSocket
  • Javascript基础之Array数组API
  • 聚类分析——Kmeans
  • 面试总结JavaScript篇
  • 区块链将重新定义世界
  • 三栏布局总结
  • 设计模式走一遍---观察者模式
  • 深度学习中的信息论知识详解
  • 字符串匹配基础上
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • (1)bark-ml
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (LeetCode C++)盛最多水的容器
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)shell调试方法
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .net下的富文本编辑器FCKeditor的配置方法
  • .Net语言中的StringBuilder:入门到精通
  • @AliasFor注解
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [acwing周赛复盘] 第 94 场周赛20230311
  • [android] 手机卫士黑名单功能(ListView优化)
  • [APIO2015]巴厘岛的雕塑
  • [C#C++]类CLASS
  • [C++]四种方式求解最大子序列求和问题
  • [caffe(二)]Python加载训练caffe模型并进行测试1
  • [codeforces] 25E Test || hash
  • [codevs] 1029 遍历问题
  • [EFI]Dell Latitude-7400电脑 Hackintosh 黑苹果efi引导文件
  • [Electron] 将应用打包成供Ubuntu、Debian平台下安装的deb包
  • [English]英语积累本