最近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. 很多个java面试题

    1. 为什么说Java是一门平台无关语言? 平台无关实际的含义是“一次编写到处运行”.Java 能够做到是因为它的字节码(byte code)可以运行在任何操作系统上,与底层系统无关. 2. 为什么 ...

  2. spring-boot-maven-plugin 插件

    添加了spring-boot-maven-plugin插件后,当运行maven打包的命令,项目会被打包成一个可以直接运行的jar包,使用"java -jar"可以直接运行. 当项目 ...

  3. 使用RabbitMQ实现延迟任务----实用场景

    1. 使用RabbitMQ实现延迟任务

  4. 在C#中执行带有GO的批量sql语句

    引用 思海网络  在用C#中调用ADO执行批量SQL语句的时候,会出现无法识别GO语句的错误.这个时候,我们以GO语句为分割点,把整个批量语句分割成N块独立的SQL语句代码块(不包含GO语句),然后再 ...

  5. JavaScript的进阶之路(二)函数简介,变量、作用域和内存问题

    <h3>ECMAScript中函数不存在函数签名的概念,没有重载</h3><h3>无需指定返回值,可以在任何时候返回任何值.未指定返回值的函数,返回的是一个特殊的u ...

  6. 微信小程序开发前期准备

    开发文档 官方开发文档 开发IDE 官方工具下载 UI组件 WeUI:是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信内网页和微信小程序量身设计,新手建议使用: ZanUI-WeAp ...

  7. PPTP has become obsolete

    https://www.ovpn.com/en/blog/pptp-has-become-obsolete/ PPTP has become obsolete What is PPTP? PPTP s ...

  8. Redis 缓存穿透

    Redis 缓存穿透 https://www.cnblogs.com/jiekzou/p/9212114.html 场景描述:我们在项目中使用缓存通常都是先检查缓存中是否存在,如果存在直接返回缓存内容 ...

  9. Shell,Bash,等脚本学习(有区别)

    二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别.   整数比较   -eq        等于,如:if [ "$a" -eq "$b" ] -n ...

  10. 「C语言」原码反码补码与位运算

    尽管能查到各种文献,亲自归纳出自己的体系还是更能加深对该知识的理解.     本篇文章便是在结合百度百科有关原码.反码.补码和位运算的介绍并深度借鉴了张子秋和Liquor相关文章后整理而出.   目录 ...