1. 程式人生 > >正則表達式和decimal format的實際項目運用

正則表達式和decimal format的實際項目運用

return except view 自動化 log class null 必須 讀取

最近review測試框架底層代碼,一是看看有哪些可以重構的,以便減少冗余增加重用,二是優化一下代碼結構增強代碼的健壯性。

其中有一個地方印象比較深刻,特記錄分享如下:

背景:在電商場景中,價格是特別重要而且敏感的信息,對價格的讀取和驗證是測試的重點之一。

但是有時候價格信息被包裹在一堆信息之中,如何準確而快速的獲取價格則是作為一個自動化測試開發人員必須要考慮的問題。

下面我們舉例說明,並提供相應的代碼。

場景:商品價格包含在一個字符串中,其中包括字母和字符,比如:此商品的價格為‘3.2’元。

目標:獲取商品的價格且保留兩位小數,不足部分補零。

review原有代碼,發現有兩個問題

1. 原有代碼通過兩個方法來實現,代碼結構不夠緊湊。

2. 通過逐個字符遍歷的方式取出價格,雖能達成業務目標但代碼不夠精煉。

3. 當商品價格為整數時不能正確處理。

解決思路:

1. 融合兩個方法,通過一個方法來處理問題。

2. 使用正則表達式來匹配字符串中的價格信息,然後獲取價格。

3. 使用decimal format來格式化數字,並增強代碼邏輯,修復商品為整數時出錯的問題。

完成新代碼後:

1. 30行代碼代替原來50行代碼,結構更加緊湊。

2. 減少了底層方法之間的互相調用。

3. 使用正則表達式更加高效,精準。

如有對正則表達式或decimal format的基礎知識有疑問,再次不做說明,請自行百度。

代碼如下:

        public
String getPrice(String str){ String price=null; float floatPrice=0; String pattern = "#.##"; int index = 0; String reg = "\\D+(\\d*\\.?\\d*).*"; // String patten = "\\D+(\\d+|([1-9]+\\d*\\.\\d*).*"; if (str!=""&&str.length()>0) price
= str.replaceFirst(reg, "$1"); else System.out.println("String is blank."); floatPrice=Float.parseFloat(price); DecimalFormat decimal = new DecimalFormat(pattern); String priceFloat2= decimal.format(floatPrice); if (priceFloat2.indexOf(".")==-1) { index=priceFloat2.length(); priceFloat2 = priceFloat2 +".00"; } else try {index=priceFloat2.indexOf("."); priceFloat2.charAt(index+2); // System.out.println(priceFloat2.charAt(priceFloat2.indexOf(".")+2)); } catch (Exception e) { priceFloat2 = priceFloat2 +"0"; } return priceFloat2; }

正則表達式和decimal format的實際項目運用