最近一直在忙着写论文敲代码,很少更新博客,在敲代码的过程中也有很多收获,现在记录一个小小的收获,如何判断是否为数字。
传统代码的写法如下:
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异常。
总结,以后在代码的编写过程中要对异常的抛出引起重视,较好的利用异常。