最近一直在忙着寫論文敲代碼,很少更新博客,在敲代碼的過程中也有很多收穫,現在記錄一個小小的收穫,如何判斷是否爲數字。
傳統代碼的寫法如下:
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異常。
總結,以後在代碼的編寫過程中要對異常的拋出引起重視,較好的利用異常。