zhrb的空间

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  20 随笔 :: 0 文章 :: 29 评论 :: 0 Trackbacks

判断一个字符串是否为数字,要考虑几种情况:

        1. 该字符串是 "0"

        2. 零点几

        3. 整数部分大于等于1,但是首字符不能为'0'

        考虑上面几种情况,如将字符串转化为字符数组去判断,未免麻烦,我们可以尝试使用Java本身的一些工具来实现该功能。

一.利用正则表达式

        查询JDK文档的Pattern与Matcher类,可得出如下代码:
   

 1import java.util.regex.*;  //正则表达式相关的类库
 2import java.io.*;
 3
 4public class isNumber{
 5    public static void main(String args[]) throws IOException{
 6        String inputString;
 7        
 8        //从键盘获得字符串
 9        System.out.println("Please input a number");
10        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
11        inputString = buf.readLine();
12        
13        //几种判断字符串是否为数字的模式
14        Pattern pattern1 = Pattern.compile("[1-9]\\d*\\.?\\d+");//整数部分大于等于1,但是首字符不能为'0'
15        Pattern pattern2 = Pattern.compile("0{1}\\.\\d+");        //零点几
16        Pattern pattern3 = Pattern.compile("0{1}");                 //该字符串是 "0"
17        
18        //使用上面的几种模式对inputString进行判断
19        Matcher matcher1 = pattern1.matcher(inputString);
20        Matcher matcher2 = pattern2.matcher(inputString);
21        Matcher matcher3 = pattern3.matcher(inputString);
22        
23        //只要其中一个条件符合就可以判定该字符串是一个合法的数
24        if (matcher1.matches() || matcher2.matches() || matcher3.matches()){
25            System.out.println(inputString+" is a number");
26        }

27    }

28}

29
30


       注:正则表达式  [1-9]\\d*(\\.\\d+){0,1},代表不以0开头的数字,其中(\\.\\d+){0,1}表示把(\\.\\d+)看成一个组,即  小数点数字(至少一个数字) 这个组, 出现0或者1次。

        也可直接  inputString.matches("^[1-9]\\d*(\\.\\d+)?$")   //[1-9]开头的数字,使用String的matches方法,来比对正则表达式

      正则表达式(\\+|\\-)?(([1-9]\\d*)|0)(\\.\\d+)?还可以对正负号进行判定,(\\+|\\-)? 正负号的判定也可写成[+-]?,(([1-9]\\d*)|0)对0或者非0开头的字符串进行判定,(\\.\\d+)?对小数点后的进行判定。看来正则表达式真的很有用。呵呵

      不过这种方法依然麻烦,其实java的类库提供有更好的方法来判断一个字符串是否为合法的数

二.利用NumberFormat和Number类

        关于这两个类的介绍大家可以自己看看文档

 

import java.text.NumberFormat;    //导入NumberFormat类
import java.io.*

public class test
{
         
public static void main(String args[]) throws Exception{
             String inputString;
             System.out.println(
"Please input a number");

             BufferedReader buf 
= new BufferedReader(new InputStreamReader(System.in));
             inputString 
= buf.readLine();


             Number number 
= NumberFormat.getInstance().parse(inputString);//解析输入的字符串,如解析不了会抛出异常
             System.out.println("number is "+number.doubleValue());                 //返回字符串代表的double值  
}



 相比较来说,第二种方法更简洁而且也不用考虑国际化的问题(欧洲国家,小数点都是逗号,千分位是点,上述第一种方法就不使用了),一群牛人都已经帮你考虑好。不过通过第一种方法我们可以学到正则表达式的用法。呵呵

看来用Java还是要多学会利用Java本身的类库。

 

posted on 2007-10-15 22:37 zhrb 阅读(1977) 评论(4)  编辑  收藏

评论

# re: 判断字符串是否为数字的几种方法 2007-10-16 15:32 RaviLi
通过Character.isDigit()判断更省力。  回复  更多评论
  

# re: 判断字符串是否为数字的几种方法 2007-10-16 21:56 zhrb
Character.isDigit()这个函数只能判断某个字符是否是数字,而不能判断某个字符串是否是一个数,数和数字不一样的
@RaviLi
  回复  更多评论
  

# re: 判断字符串是否为数的几种方法 2007-10-18 09:55 Raylong
是啊,Java的类库把我们从细节中解脱出来,可以专注问题本身,容易作出大的项目。我还没学过正则表达式,正好初步了解一下。

下面是我的实现版本,条条大路通罗马啊 呵呵

import java.io.*;

class Demo {
public static void main(String[] args) {
String inputString;
System.out.println("Please input a number");
try{
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
inputString = buf.readLine();

double number = Double.parseDouble(inputString);
System.out.println("your input number is :" + number);
} catch (IOException ioe) {
System.out.println("IOException in read user input.");
} catch (NumberFormatException nfe){
System.out.println("Not a number.");
}
}
}
  回复  更多评论
  

# re: 判断字符串是否为数的几种方法 2007-10-18 11:14 zhrb
是啊,这个更简洁易懂,不知道我那时候为啥没想到这个方法。可能是那时候好像是考虑String不能以0开头的这个要求...
@Raylong
  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: