zhrb的空間

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            20 隨筆 :: 0 文章 :: 29 評論 :: 0 Trackbacks

          判斷一個字符串是否為數(shù)字,要考慮幾種情況:

                  1. 該字符串是 "0"

                  2. 零點(diǎn)幾

                  3. 整數(shù)部分大于等于1,但是首字符不能為'0'

                  考慮上面幾種情況,如將字符串轉(zhuǎn)化為字符數(shù)組去判斷,未免麻煩,我們可以嘗試使用Java本身的一些工具來實(shí)現(xiàn)該功能。

          一.利用正則表達(dá)式

                  查詢JDK文檔的Pattern與Matcher類,可得出如下代碼:
             

           1import java.util.regex.*;  //正則表達(dá)式相關(guān)的類庫
           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        //幾種判斷字符串是否為數(shù)字的模式
          14        Pattern pattern1 = Pattern.compile("[1-9]\\d*\\.?\\d+");//整數(shù)部分大于等于1,但是首字符不能為'0'
          15        Pattern pattern2 = Pattern.compile("0{1}\\.\\d+");        //零點(diǎn)幾
          16        Pattern pattern3 = Pattern.compile("0{1}");                 //該字符串是 "0"
          17        
          18        //使用上面的幾種模式對inputString進(jìn)行判斷
          19        Matcher matcher1 = pattern1.matcher(inputString);
          20        Matcher matcher2 = pattern2.matcher(inputString);
          21        Matcher matcher3 = pattern3.matcher(inputString);
          22        
          23        //只要其中一個條件符合就可以判定該字符串是一個合法的數(shù)
          24        if (matcher1.matches() || matcher2.matches() || matcher3.matches()){
          25            System.out.println(inputString+" is a number");
          26        }

          27    }

          28}

          29
          30


                 注:正則表達(dá)式  [1-9]\\d*(\\.\\d+){0,1},代表不以0開頭的數(shù)字,其中(\\.\\d+){0,1}表示把(\\.\\d+)看成一個組,即  小數(shù)點(diǎn)數(shù)字(至少一個數(shù)字) 這個組, 出現(xiàn)0或者1次。

                  也可直接  inputString.matches("^[1-9]\\d*(\\.\\d+)?$")   //[1-9]開頭的數(shù)字,使用String的matches方法,來比對正則表達(dá)式

                正則表達(dá)式(\\+|\\-)?(([1-9]\\d*)|0)(\\.\\d+)?還可以對正負(fù)號進(jìn)行判定,(\\+|\\-)? 正負(fù)號的判定也可寫成[+-]?,(([1-9]\\d*)|0)對0或者非0開頭的字符串進(jìn)行判定,(\\.\\d+)?對小數(shù)點(diǎn)后的進(jìn)行判定。看來正則表達(dá)式真的很有用。呵呵

                不過這種方法依然麻煩,其實(shí)java的類庫提供有更好的方法來判斷一個字符串是否為合法的數(shù)

          二.利用NumberFormat和Number類

                  關(guān)于這兩個類的介紹大家可以自己看看文檔

           

          import java.text.NumberFormat;    //導(dǎo)入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值  
          }



           相比較來說,第二種方法更簡潔而且也不用考慮國際化的問題(歐洲國家,小數(shù)點(diǎn)都是逗號,千分位是點(diǎn),上述第一種方法就不使用了),一群牛人都已經(jīng)幫你考慮好。不過通過第一種方法我們可以學(xué)到正則表達(dá)式的用法。呵呵

          看來用Java還是要多學(xué)會利用Java本身的類庫。

           

          posted on 2007-10-15 22:37 zhrb 閱讀(1998) 評論(4)  編輯  收藏

          評論

          # re: 判斷字符串是否為數(shù)字的幾種方法 2007-10-16 15:32 RaviLi
          通過Character.isDigit()判斷更省力。  回復(fù)  更多評論
            

          # re: 判斷字符串是否為數(shù)字的幾種方法 2007-10-16 21:56 zhrb
          Character.isDigit()這個函數(shù)只能判斷某個字符是否是數(shù)字,而不能判斷某個字符串是否是一個數(shù),數(shù)和數(shù)字不一樣的
          @RaviLi
            回復(fù)  更多評論
            

          # re: 判斷字符串是否為數(shù)的幾種方法 2007-10-18 09:55 Raylong
          是啊,Java的類庫把我們從細(xì)節(jié)中解脫出來,可以專注問題本身,容易作出大的項(xiàng)目。我還沒學(xué)過正則表達(dá)式,正好初步了解一下。

          下面是我的實(shí)現(xiàn)版本,條條大路通羅馬啊 呵呵

          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.");
          }
          }
          }
            回復(fù)  更多評論
            

          # re: 判斷字符串是否為數(shù)的幾種方法 2007-10-18 11:14 zhrb
          是啊,這個更簡潔易懂,不知道我那時候?yàn)樯稕]想到這個方法。可能是那時候好像是考慮String不能以0開頭的這個要求...
          @Raylong
            回復(fù)  更多評論
            


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 潜江市| 托克托县| 丰宁| 荃湾区| 安宁市| 凌云县| 南投县| 泸州市| 惠安县| 石嘴山市| 桃园县| 交城县| 津市市| 洪湖市| 水城县| 鄂州市| 湖南省| 南溪县| 项城市| 黄浦区| 布尔津县| 永清县| 蕉岭县| 榆树市| 托克逊县| 望谟县| 田阳县| 山东| 夹江县| 桃园县| 诸暨市| 内江市| 军事| 齐齐哈尔市| 内黄县| 新化县| 琼海市| 内江市| 沅陵县| 名山县| 犍为县|