最近一直在忙着写论文敲代码,很少更新博客,在敲代码的过程中也有很多收获,现在记录一个小小的收获,如何判断是否为数字

传统代码的写法如下:

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异常。

总结,以后在代码的编写过程中要对异常的抛出引起重视,较好的利用异常。