最近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. 十、集成使用redis

    一.简介 redis是一种非关系型数据库,它的数据结构是key-value的存储形式:能够支持多种类型的数据存储,如:string/list/map/object...等.springboot自然也对 ...

  2. springboot+mybatis实现动态切换数据源

    前几天有个需求,需要使用不同的数据源,例如某业务要用A数据源,另一个业务要用B数据源.我上网收集了一些资料整合了一下,虽然最后这个需求不了了之了,但是多数据源动态切换还是蛮好用的,所以记录一下,或许以 ...

  3. 八 SocketChannel

    SocketChannel是一个连接到Tcp网络套接字的通道.可以通过以下两种方式创建SocketChannel: 1.打开一个SocketChannel并连接到互联网上的某台服务器. 2.一个新连接 ...

  4. svn 未提交的显示黑色的星*

    1.在eclipse中,选择window-->Preferences,里面找到svn,如下图,勾选上Outgoing changes即可

  5. webservice使用EF生成的model序列化问题

    类型 xx 的成员 xxx 是接口,因此无法将其序列化. 修改.tt模板文件,添加以下标红两行 <# foreach (var navigationProperty in navigationP ...

  6. npm全局安装失效修复

    一.windows下 先查看npm包的默认安装目录 npm config get prefix 修改配置 npm config set prefix "nodeJs的安装目录" 二 ...

  7. C# 使用Guid类生成不重复的随机数

    什么是Guid GUID(全局唯一标识符)         全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID ...

  8. windows定位dll的搜索顺序

    原文:http://blog.csdn.net/zzxian/article/details/6429293 Visual C++ Windows 用来定位 DLL 的搜索路径 通过隐式和显式链接,W ...

  9. dom操作排他思想

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. idea基础操作

    idea 类和方法注释模板生成 设置教程:https://blog.csdn.net/xiaoliulang0324/article/details/79030752