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

Posted 奔跑的蜗牛-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式和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;
        }

 

以上是关于正则表达式和decimal format的实际项目运用的主要内容,如果未能解决你的问题,请参考以下文章

使用String.Format创建正则表达式

电话没有使用正则表达式进行验证-Ph. Format (974) 041-0475 [重复]

pandas to_csv 参数 float_format 和 decimal 不适用于索引列

Python面试必考重点之字符串与正则表达式第四关——format格式化字符串的详细用法

Python面试必考重点之字符串与正则表达式第四关——format格式化字符串的详细用法

正则表达式在javascript中重新排序部分日期