最近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的实际项目运用的更多相关文章

  1. 使用nose 进行Python项目的自动化测试

    一.为什么使用nose? 编写测试更容易.nose可以自动识别继承于unittest.TestCase的测试单元,并执行测试,而且,nose也可以测试非继承于unittest.TestCase的测试单 ...

  2. 【慕课网实战】Spark Streaming实时流处理项目实战笔记十五之铭文升级版

    铭文一级:[木有笔记] 铭文二级: 第12章 Spark Streaming项目实战 行为日志分析: 1.访问量的统计 2.网站黏性 3.推荐 Python实时产生数据 访问URL->IP信息- ...

  3. Date.prototype.format,js下的时间格式处理函数

    该方法在date的原型中扩展了format方法,使其可以方便的格式化日期格式输出. Date.prototype.format =function(format) { var o = { , //mo ...

  4. String.format Tutorial

    String format(String format, Object... args) The format specifiers for general, character, and numer ...

  5. Python中格式化format()方法详解

    Python中格式化format()方法详解 Python中格式化输出字符串使用format()函数, 字符串即类, 可以使用方法; Python是完全面向对象的语言, 任何东西都是对象; 字符串的参 ...

  6. java正则表达式的知识

    /** 用途:正则表达式 * 创建人:向家康 * 创建日期:2019年4月21日 下午9:59:08 */ //有了登录界面当然少不了正则表达式啦,这是做项目必备的知识点 //通过本博客的代码,想必即 ...

  7. JavaScript字符串Format

    一直用C#编程,在日常字符串拼接中string.Format()一直是个很好用很常用的方法,不用自己+++,既影响开发效率也影响可读性 然而在js中并没有这样的函数可供使用,so整理了一个js的字符串 ...

  8. jenkins针对不同用户显示不同项目

    网上看了别人写的博客有点头晕 比如:https://www.cnblogs.com/kazihuo/p/9022899.html  典型的权限混乱,te用户可以读re用户的项目,re用户可以读te用户 ...

  9. [置顶] Android开发笔记(成长轨迹)

    分类: 开发学习笔记2013-06-21 09:44 26043人阅读 评论(5) 收藏 Android开发笔记 1.控制台输出:called unimplemented OpenGL ES API ...

随机推荐

  1. mybatis笔记<一> Demo

    mybatis作为一个orm互联网公司基本都在用,今天写个笔记.记录一下mybatis使用 参考官网:http://www.mybatis.org/mybatis-3/getting-started. ...

  2. 小白学flask之静态文件

    引入css的方式有两种 1 那在flask中,如何处理静态文件? 做法很简单,只要在你的包或模块旁边创建一个名为 static 的文件夹就行了. flask的静态文件是位于应用的 /static 中的

  3. 廖雪峰JavaScript练习题2

    请把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字.输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart'] 肯定有更简单的方法, ...

  4. 高德地图 API JavaScript API

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm12.aspx ...

  5. google搜索使用技巧

    1.输入框所有空格都被理解为加号2.搜索多个单词时,需要加上引号,会当字符串处理3.使用-(减号)剔除指定条件,如:'mongdb'-'nodejs'4.可以使用通配符,如'vue *'5.在指定网站 ...

  6. Java反射机制(带应用)

    1.Java的反射机制:        Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态 ...

  7. Keras 时序模型

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Thinking_boy1992/article/details/53207177 本文翻译自 时序模 ...

  8. ie6 浏览器的bug

    1.IE6不支持连续类的交集选择器 1 #box.box.box1{ 2             width: 200px; 3             height: 200px; 4       ...

  9. 错误的git reset操作之后的补救措施

    (相关命令:git reset.git log.git reflog,要看文档的话用--help.) 这是一次愚蠢的行为之后的总结……避免我之后忘记了解决方法[逃 get reset --hard是一 ...

  10. lua 中的上n级模块路径函数分享

    --- 得到 lua 模块路径的上 n 级,返回的的字符串结尾有个 "." 字符 -- @usage getUpFloder("math.base.core", ...