正则表达式和decimal format的实际项目运用

最近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;
        }
时间: 2024-10-13 10:40:50

正则表达式和decimal format的实际项目运用的相关文章

Jquery Validate高级定制: 传入正则表达式,传入错误消息

背景:    Jquery Validate在网上能够找到的资料都是固定一种验证方式,大家讨论的都是正则表达式如何写的问题. 在工作实践中,找到一个可以动态传入正则表达式的方法,跟大家共享下,希望能够抛砖引玉. 功能描述: 传入正则表达式,传入错误消息 详细 项目中规则都是自动定义的,当然比较简单.可以动态增加验证规则.复杂点的可以自己写正则表达式.话不多说看代码. jQuery.validator 加一个扩展 jQuery.validator.addMethod("diyCheck"

结对项目-四则运算 “软件”之升级版

随笔缘由:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213 githup缘由:https://github.com/tianshizhao/tianshizhao 一.基本要求 从个人项目出发,将程序改造成一个单机带用户界面(不是控制台)的程序,这个程序最基本要达到: 自动生成题目,单个题目最多不能超过4个运算符,操作数小于100. 用户可以输入答案 若用户输入答案正确,则提示正确:若答案错误,则提示错误,并要提示正确答案是

String.format Tutorial

String format(String format, Object... args) The format specifiers for general, character, and numeric types have the following syntax: %[argument_index$][flags][width][.precision]conversion argument_index is a decimal integer indicating the position

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

该方法在date的原型中扩展了format方法,使其可以方便的格式化日期格式输出. Date.prototype.format =function(format) { var o = { "M+" : this.getMonth()+1, //month "d+" : this.getDate(), //day "h+" : this.getHours(), //hour "m+" : this.getMinutes(), /

Python - 格式化(format())输出

age = 25 name = 'Caroline' print('{0} is {1} years old. '.format(name, age)) #输出参数 print('{0} is a girl. '.format(name)) print('{0:.3} is a decimal. '.format(1/3)) #小数点后三位 print('{0:_^11} is a 11 length. '.format(name)) #使用_补齐空位 print('{first} is as 

Asp.Net MVC4.0 从入门到精通与项目实战 (Petapoco框架、二维码自定义、Bootstrap视图)视频教程

Asp.Net MVC4.0 从入门到精通与项目实战 (Petapoco框架.二维码自定义.Bootstrap视图)视频教程下载    联系QQ:1026270010 Asp.Net MVC 简介      MVC模式是“Model-View-Controller”的缩写,中文翻译为“模式-视图-控制器”.MVC模式是于20世纪70年代在smaltalk80的GUI设计中被提出的.它包括3个部分:模型(Model).视图(View)和控制器(Controller).MVC模式至今已被广泛使用,A

JavaScript字符串Format

一直用C#编程,在日常字符串拼接中string.Format()一直是个很好用很常用的方法,不用自己+++,既影响开发效率也影响可读性 然而在js中并没有这样的函数可供使用,so整理了一个js的字符串format函数供项目的日常使用 虽然并不是很完善也不能提升拼接效率,但是足够满足开发过程中的工作效率和可读性 通过String类型的原型prototype新增一个format方法,方便使用 String.prototype.format = function () { if (arguments.

HTML5前端入门教程:简析正则表达式

很多人对正则表达式的印象都是用来做表单验证的,这其实是不大准确的.正则表达式目前在很多软件中都得到了广泛的应用,包括Linux,Unix等操作系统,VB,Java,PHP等开发环境中,以及很多应用软件都能应用到正则表达式. 一.正则的历史 首先先来扫清一个误区,老是有人认为正则表达式是JS自己发明的,这当然是不正确的.1956年,一位名叫Stephen Kleene的数学家在McCulloch和pitts早期工作的基础上,发表了一篇标题为<神经网的表示法>的论文,第一次引入了正则表达式的概念.

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

Python中格式化format()方法详解 Python中格式化输出字符串使用format()函数, 字符串即类, 可以使用方法; Python是完全面向对象的语言, 任何东西都是对象; 字符串的参数使用{NUM}进行表示,0, 表示第一个参数,1, 表示第二个参数, 以后顺次递加; 使用":", 指定代表元素需要的操作, 如":.3"小数点三位, ":8"占8个字符空间等; 还可以添加特定的字母, 如: 'b' - 二进制. 将数字以2为基数