本人在做性能測試過程中,發現代碼中存在一個校驗手機的方法,用的是正則匹配的模式。代碼如下:
public static boolean isTel(String tel) {
Pattern p = Pattern.compile("^[1][3,4,5,6,7,8,9][0-9]{9}$");
Matcher m = p.matcher(tel);
return m.matches();
}
咋一看沒啥問題,但是仔細看最後用到了matches這個方法,此方法用於完全匹配纔會返回true,因爲正則表達式中已經才用了行首和行尾的標記,其實這個用matches()方法和find()方法差不太多,find其實也可以。這種情況下性能差異忽略。
其實這裏的校驗比較簡單,使用正則並不是最好的方式,因爲正則非常耗時,經過本機測試,正確的手機匹配需要耗時30+ms,雖然很短,但是每次請求都校驗一次的代價全是非常大的,經過一些嘗試,終於找到了一個更高效的檢驗方法。如下:
static boolean isTel(String tel) {
try {
def of = Long.valueOf(tel)
if (of >= 13000000000 && of <= 19000000000)
return true
} catch (Exception e) {
return false
}
}
經過測試,該方法需要5-6ms就能搞定。
技術類文章精選
- java一行代碼打印心形
- Linux性能監控軟件netdata中文漢化版
- 接口測試代碼覆蓋率(jacoco)方案分享
- 性能測試框架
- 如何在Linux命令行界面愉快進行性能測試
- 圖解HTTP腦圖
- 將swagger文檔自動變成測試代碼
- 五行代碼構建靜態博客
- 基於java的直線型接口測試框架初探
非技術文章精選
- 爲什麼選擇軟件測試作爲職業道路?
- 寫給所有人的編程思維
- 自動化測試的問題所在
- 成爲優秀自動化測試工程師的7個步驟
- 手動測試存在的重要原因
- 成爲自動化測試的7種技能
- 功能測試與非功能測試
- 自動化和手動測試,保持平衡!
- 自動化測試生命週期
大咖風采