[转]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,所以还不如这个工作由我们自己来做,还省得再抛出一次异常...
[转]Java中怎样判断一个字符串能否转成数字的更多相关文章
- java中如何判断一个字符串是否包含另外一个字符串的方法
indexOf(String s)的使用,如果包含,返回的值是包含该子字符串在父类字符串中起始位置: 如果不包含必定全部返回值为-1 package my_automation; public cla ...
- Java中怎样判断一个字符串是否是数字?
1:正则表达式 public static void main(String[] args) { String str = "123456456456456456"; boolea ...
- Java中如何判断一个字符串是否为数字
方法一:异常处理 public static boolean isInteger(String str){ try { Integer i = Integer.parseInt(str); retur ...
- java中怎么判断一个字符串中包含某个字符或字符串
public static void main(String[] args) { String str="ABC_001"; ){ System.out.println(" ...
- java中判断一个字符串是否“都为数字”和“是否包含数字”和“截取数字”
在javascript中有一个方法isDigit()使用来判断一个字符串是否都是数字,在java的字符串处理方法中没有这样的方法,觉得常常需要用到,于是上网搜了一下,整理出了两个用正则表达式匹配的判断 ...
- Oracle中如何判断一个字符串是否含有汉字
看到网友问,怎么查询表中某个字段数据是不是包含了全角字符啊? 这个问题涉及到几个函数:to_single_byte.length和lengthb,我之前做开发的时候研究的是如何判断一个字符串中是否包含 ...
- js中如何判断一个字符串包含另外一个字符串?
js中判断一个字符串包含另外一个字符串的方式比较多? 比如indexOf()方法,注意O是大写. var test="this is a test"; if(test.indexO ...
- 在Java中用正则表达式判断一个字符串是否是数字的方法
package chengyujia; import java.util.regex.Pattern; public class NumberUtil { /** * 判断一个字符串是否是数字. * ...
- Java中如何判断一个日期字符串是否是指定的格式
判断日期格式是否满足要求 import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date ...
随机推荐
- Android常见的按钮监听器实现方式
为按钮(Button)添加响应事件,需要为其设置监听器(Listener).本文总结了Android中常用的几种Button Listener. 第一种:匿名内部类作为事件监听器类 1 2 3 4 5 ...
- Caffe CNN特征可视化
转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ 以下部分代码是根据caffe的python接口,从一次forwo ...
- 怎么实现ZBrush中Alt键和Shift键的灵活运用
ZBrush是一个数字雕刻和绘画软件,它以强大的功能和直观的工作流程彻底改变了整个三维雕刻行业.在一个简洁的界面中,ZBrush为当代数字艺术家提供了世界上最先进的工具.利用快捷键能使操作更快捷高效, ...
- java-vector hashtable过时?
vector hashtable过时? 在用JAVA集合时,IDE提示 vector 以及hashtable被arraylist ,hashmap替代,而前者又是线程同步的,不知道为什么?是效率差了的 ...
- Nginx+keepalived双机热备(主主模式)
之前已经介绍了Nginx+Keepalived双机热备的主从模式,今天在此基础上说下主主模式的配置. 由之前的配置信息可知:master机器(master-node):103.110.98.14/19 ...
- 分享一例测试环境下nginx+tomcat的视频业务部署记录
需求说明:在测试环境下(192.168.1.28)部署一套公司某业务环境,其中:该业务前台访问地址: http://testhehe.wangshibo.com该业务后台访问地址: http://te ...
- expect结合ssh遍历线上机器
有个需求,有个文件删除了,但是不确定线上机器还都存不存在 #!/home/work/.jumbo/bin/expect -f set timeout - set mac [lindex $argv ] ...
- PAT 1002. 写出这个数 (20)
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各位数字之和的每 ...
- win10显示此电脑
http://jingyan.baidu.com/article/3aed632e00dfe17011809169.html
- codevs3145 汉诺塔问题
难度等级:白银 3145 汉诺塔问题 题目描述 Description 汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题.在A,B,C三根柱子上,有n个不同大小的圆盘(假设半径分别为1-n吧),一 ...