(转)java判断string变量是否是数字的六种方法小结

java判断string变量是否是数字的六种方法小结

(2012-10-17 17:00:17)

转载▼

标签:

it

分类: 转发

1.用JAVA自带的函数

public static boolean isNumeric(String str){

for (int i = 0; i < str.length(); i++){

System.out.println(str.charAt(i));

if (!Character.isDigit(str.charAt(i))){

return false;

}

}

return true;

}

2.用正则表达式

首先要import java.util.regex.Pattern 和 java.util.regex.Matcher

public boolean isNumeric(String str){

Pattern pattern = Pattern.compile("[0-9]*");

Matcher isNum = pattern.matcher(str);

if( !isNum.matches() ){

return false;

}

return true;

}

3.使用org.apache.commons.lang

org.apache.commons.lang.StringUtils;

boolean isNunicodeDigits=StringUtils.isNumeric("aaa123456789");

http://jakarta.apache.org/commons/lang/api-release/index.html下面的解释:

isNumeric

public static boolean isNumeric(String str)Checks if the String contains only unicode digits. A decimal point is not a unicode digit and returns false.

null will return false. An empty String ("") will return true.

StringUtils.isNumeric(null)   = false

StringUtils.isNumeric("")     = true

StringUtils.isNumeric(" ")   = false

StringUtils.isNumeric("123") = true

StringUtils.isNumeric("12 3") = false

StringUtils.isNumeric("ab2c") = false

StringUtils.isNumeric("12-3") = false

StringUtils.isNumeric("12.3") = false

Parameters:

str - the String to check, may be null

Returns:

true if only contains digits, and is non-null

上面三种方式中,第二种方式比较灵活。

第一、三种方式只能校验不含负号“-”的数字,即输入一个负数-199,输出结果将是false;

而第二方式则可以通过修改正则表达式实现校验负数,将正则表达式修改为“^-?[0-9]+”即可,修改为“-?[0-9]+.?[0-9]+”即可匹配所有数字。

如果我输入的是"a“,它能识别出来这个不是数字,该怎么写?

import java.io.* ;

import java.util.* ;

public class Test{

public static void main(String [] args) throws Exception{

System.out.println("请输入数字:");

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

String line=br.readLine();

if(line.matches("\\d+"))     //正则表达式 详细见java.util.regex 类 Pattern

System.out.println("数字");

else

System.out.println("非数字");

}

}

("\d")是数字0-9 ("\\d+")是什么意思?

正则表达式用两个斜杠表示一个斜杠,后面跟着一个加号表示出现一次或多次,完整的意思就是整个字符串中仅包含一个或多个数字。

//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,所以还不如这个工作由我们自己来做,还省得再抛出一次异常...

用4比较方便

时间: 2024-12-20 14:29:52

(转)java判断string变量是否是数字的六种方法小结的相关文章

java判断string变量是否是数字

1.用正则表达式 首先要import java.util.regex.Pattern 和 java.util.regex.Matcher /*方法1):推荐,速度最快   * 利用正则表达式判断字符串是否是数字   * @param str 传入的字符串    * @return 是整数返回true,否则返回false   */     public boolean isNumeric(String str){            Pattern pattern = Pattern.compi

js中判断一个变量是否为数字类型的疑问

1.typeof(a)=="number" 是true,但是a instanceof Number却为false,不理解 2.isNaN()不能判断一个变量是否为数字类型,isNaN(123)值为false,isNaN('123')值也为false.isNaN() 的实际作用跟它的名字isNaN并不一致,isNaN(NaN)值为true,isNaN(Number("xyz"))值为true,isNaN("abc")值为true,isNaN(123

java 判断String字符串是不是json数据

java 判断String字符串是不是json数据 CreationTime--2018年8月24日18点23分 Author:Marydon JSONObject jo = null; try { jo = JSONObject.fromObject(content); } catch (Exception e) { throw new RuntimeException("不是json格式数据:" + jo); } 相关推荐: 类似文章 原文地址:https://www.cnblog

Java 判断字符串是否为空的四种方法、优缺点与注意事项

以下是Java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||"".equals(s));方法二: 比较字符串长度, 效率高, 是我知道的最好一个方法: if(s == null || s.length() <= 0);方法三: JavaSE 6.0 才开始提供的方法, 效率和方法二几乎相等, 但出于兼容性考虑, 推荐使用方法二. if(s == null || s.isEmpty()); 方法四:

java 判断一个字符串中的数字:是否为数字、是否包含数字、截取数字

题外话: JavaScript中判断一个字符是否为数字,用函数:isDigit(); 一.判断一个字符串是否都为数字 package com.cmc.util; import java.util.regex.Matcher; import java.util.regex.Pattern; public class DigitUtil { public static void main(String[] args) { String str="123d"; System.out.prin

java判断字符串是否可以转为数字

java运算中,常涉及将String 型的字符串转为int 型数字的情况. 哪些字符串可以转为数字,哪些不可以呢,不能总以Integer.parseInt() 是否抛出异常来判断. 刚好碰到了转换情况,就总结了下,分享出来. 定义方法签名 /** * 查看一个字符串是否可以转换为数字 * @param str 字符串 * @return true 可以; false 不可以 */ public static boolean isStr2Num(String str) { } 方法体该如何实现呢?

不得不谈Java的String&quot;变量”

今天,我在写程序的过程中,发现了一个问题,那就是我们同样定义了一个变量,一个是字符串型的变量,一个是整型变量, 可为什么字符串型的变量却可以直接调用方法,而整型变量却不可以呢? 2 int b =2; 3 String so = "hello , myfriend...."; 4 System.out.println(so.length()); //变量so. 有方法 5 System.out.println(b.length()); //变量b . 没有方法 通过查找发现: 原来,s

PHP中判断变量为空的几种方法小结

isset  主要用来判断变量是否被初始化过empty  可以将值为 "假"."空"."0"."NULL"."未初始化" 的变量都判断为TRUEis_null  仅把值为 "NULL" 的变量判断为TRUEvar == null  把值为 "假"."空"."0"."NULL" 的变量都判断为TRUEvar =

java 判断对象是否是某个类的类型方法

class Do1 { public static void main(String[] args) { AA a=new CC(); if(a instanceof CC) { CC b=(CC)a; b.run(); } } } class AA { int y=3; void brun() { System.out.println(y); } } class CC extends AA { int x=1; void run() { System.out.println(x); } } c