巧判是否爲數字

最近一直在忙着寫論文敲代碼,很少更新博客,在敲代碼的過程中也有很多收穫,現在記錄一個小小的收穫,如何判斷是否爲數字

傳統代碼的寫法如下:

public static boolean isNumeric(String str){
        boolean isNum = false;
        char[] c = str.toCharArray();
        if((c[0] <= 'Z' && c[0] >='A') || (c[0] <= 'z' && c[0] >='a')){
            isNum = false;
        }else{
            isNum = true;
        }
        return isNum;
    }

上述代碼無需多解釋,下面看看我在讀mahout源碼時看見的編寫方式:

public static String generateDescriptor(String[] str) throws DescriptorException{
        StringBuilder descriptor = new StringBuilder();
        
        int multiplicator = 0;
        
        for (String token : str) {
          try {
            // try to parse an integer
            int number = Integer.parseInt(token);
            
            if (number <= 0) {
              throw new DescriptorException("Multiplicator (" + number + ") must be > 0");
            }
            if (multiplicator > 0) {
              throw new DescriptorException("A multiplicator cannot be followed by another multiplicator");
            }
            
            multiplicator = number;
          } catch (NumberFormatException e) {
            // token is not a number
            if (multiplicator == 0) {
              multiplicator = 1;
            }
            
            for (int index = 0; index < multiplicator; index++) {
              descriptor.append(token).append(' ');
            }
            
            multiplicator = 0;
          }
        }

上述代碼實現的功能是判斷一串字符如N 3 A 。。。中哪個爲數字,並將數字後面的字符重複數字顯示的個數,N 3 A 產生爲N A A A。

其中判斷是否爲數字的方法是利用了異常拋出的原理,代碼如下:

int number = Integer.parseInt(token);

上述代碼在格式化爲數字時,對於非數字的會拋出一個NumberFormatException異常。

總結,以後在代碼的編寫過程中要對異常的拋出引起重視,較好的利用異常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章