<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    zhrb的空間

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

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

            1. 該字符串是 "0"

            2. 零點幾

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

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

    一.利用正則表達式

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

     1import java.util.regex.*;  //正則表達式相關(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+");        //零點幾
    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        //只要其中一個條件符合就可以判定該字符串是一個合法的數(shù)
    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開頭的數(shù)字,其中(\\.\\d+){0,1}表示把(\\.\\d+)看成一個組,即  小數(shù)點數(shù)字(至少一個數(shù)字) 這個組, 出現(xiàn)0或者1次。

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

          正則表達式(\\+|\\-)?(([1-9]\\d*)|0)(\\.\\d+)?還可以對正負號進行判定,(\\+|\\-)? 正負號的判定也可寫成[+-]?,(([1-9]\\d*)|0)對0或者非0開頭的字符串進行判定,(\\.\\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ù)點都是逗號,千分位是點,上述第一種方法就不使用了),一群牛人都已經(jīng)幫你考慮好。不過通過第一種方法我們可以學到正則表達式的用法。呵呵

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

     

    posted on 2007-10-15 22:37 zhrb 閱讀(1994) 評論(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的類庫把我們從細節(jié)中解脫出來,可以專注問題本身,容易作出大的項目。我還沒學過正則表達式,正好初步了解一下。

    下面是我的實現(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
    是啊,這個更簡潔易懂,不知道我那時候為啥沒想到這個方法。可能是那時候好像是考慮String不能以0開頭的這個要求...
    @Raylong
      回復(fù)  更多評論
      


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 131美女爱做免费毛片| 国产亚洲精品美女久久久久| 亚洲国产精品lv| 精品国产亚洲一区二区在线观看| 免费成人在线观看| 亚洲第一视频在线观看免费| va亚洲va日韩不卡在线观看| 免费一级做a爰片久久毛片潮喷| 午夜国产大片免费观看| 亚洲国产精品不卡毛片a在线| 亚洲色一色噜一噜噜噜| 337p日本欧洲亚洲大胆裸体艺术 | 成人爽a毛片免费| 女同免费毛片在线播放| 久久久久久久久久国产精品免费| 无码人妻一区二区三区免费n鬼沢| 99久久免费中文字幕精品| 日韩人妻一区二区三区免费| 日本三级2019在线观看免费| 免费观看理论片毛片| 全亚洲最新黄色特级网站 | 亚洲精品国产手机| 国产亚洲sss在线播放| 亚洲成a∨人片在无码2023| 亚洲精品无码mⅴ在线观看| 青娱乐在线免费观看视频| 在线视频网址免费播放| 一级成人a毛片免费播放| 五月婷婷在线免费观看| 免费看又爽又黄禁片视频1000 | 免费无码又爽又刺激高潮软件| 午夜视频在线免费观看| 99精品全国免费观看视频| 四虎影在线永久免费四虎地址8848aa | 无套内谢孕妇毛片免费看看| 美女网站在线观看视频免费的| 免费不卡在线观看AV| 毛片免费全部免费观看| 亚洲免费日韩无码系列| 亚洲最新永久在线观看| 亚洲日韩一区精品射精|