首页 > 编程语言 >ParameterUtils【java正则表达式】【多测师_王sir】

ParameterUtils【java正则表达式】【多测师_王sir】

时间:2022-10-26 11:05:36浏览次数:54  
标签:java String ParameterUtils -- str parameterName 字符串 多测师 mobilephone

import static org.testng.Assert.assertEqualsNoOrder;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.JsonPath;

public class ParameterUtils {

//创建参数化的容器
private static Map<String, String> globalDataMap = new HashMap<String, String>();

/**
* 通过参数名,返回数据池中间对应的值
* @param parameterName
* @return
*/
public static String getGlobalData(String parameterName) {
return globalDataMap.get(parameterName);
}

/**
* 添加数据到全局数据池中
* @param parameterName
* @param parameterValue
*/
public static void addGlobalData(String parameterName, String parameterValue) {
globalDataMap.put(parameterName, parameterValue);
}

/**
* 正则匹配并替换为数据池中间的参数值
* @param args
*/
public static String getReplacedStr(String str) {
//把所有符合参数化规则的字符串提取出来
//正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),
//计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

//符合${mobilephone}规则的正则表达式
//规则:开头是${,中间是任意字符串,皆为是}
// \$\{.*\}
String regex = "\\$\\{(.*?)\\}";
//编译正则表达式,得到模式对象
Pattern pattern = Pattern.compile(regex);
//匹配字符串(检索),得到匹配对象
Matcher matcher = pattern.matcher(str);
//当检索出有下一个匹配的字符串后
while (matcher.find()) {
String totalStr = matcher.group(0);//完整的符合规则的字符串 -->${mobilephone}
String parameterName = matcher.group(1);//对应的参数名-->mobilephone -->到容器中找对应的值
String parameterValue = globalDataMap.get(parameterName); //-->13777777777
// System.out.println(totalStr + "-->" + parameterName + "-->" + parameterValue);
//把原字符串中间的符合规则的字符串,替换为对应参数的值
//${mobilephone} -->13777777777
str = str.replace(totalStr, parameterValue);
}
return str;
}

public static void main(String[] args) {
// example();

String jsonStr = "{\"status\":1,\"code\":\"10001\",\r\n" +
" \"data\":{\"id\":3,\"regname\":\"jack\",\r\n" +
" \"pwd\":\"E10ADC3949BA59ABBE56E057F20F883E\",\r\n" +
" \"mobilephone\":\"13999888819\",\"leaveamount\":\"10000.00\",\r\n" +
" \"type\":\"1\",\"regtime\":\"2019-04-20 11:39:05.0\"},\r\n" +
" \"msg\":\"充值成功\"}";
Object document = Configuration.defaultConfiguration().jsonProvider().parse(jsonStr);
Object idStr = JsonPath.read(document, "$.data.regtime");
System.out.println(idStr);
}

private static void example() {
//准备一个没有注册过的手机号:13777777777 --》保存到一个容器中
//要把13666666666替换为13777777777
//设计一个规则,就是告诉系统从容器中去拿没有注册过的手机号
//{"mobilephone":"${mobilephone}","pwd":"123456","regname":"lemonban"}
//${mobilephone}:去容器中读取出mobilephone对应的值

/**
* 参数化:
* 1:完成接口的关联
* 2:分离出静态的数据,让接口测试用例更加容易维护
*/
Map<String, String> parametersMap = new HashMap<String, String>();
parametersMap.put("mobilephone", "13777777778");
parametersMap.put("pwd", "123456");
String str = "{\"mobilephone\":\"${mobilephone}\",\"pwd\":\"${pwd}\",\"regname\":\"lemonban\"}";
System.out.println("原始字符串:" + str);
//把${mobilephone}替换为13777777777

//把所有符合参数化规则的字符串提取出来
//正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),
//计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

//符合${mobilephone}规则的正则表达式
//规则:开头是${,中间是任意字符串,皆为是}
// \$\{.*\}
String regex = "\\$\\{(.*?)\\}";
//编译正则表达式,得到模式对象
Pattern pattern = Pattern.compile(regex);
//匹配字符串(检索),得到匹配对象
Matcher matcher = pattern.matcher(str);
//当检索出有下一个匹配的字符串后
while (matcher.find()) {
String totalStr = matcher.group(0);//完整的符合规则的字符串 -->${mobilephone}
String parameterName = matcher.group(1);//对应的参数名-->mobilephone -->到容器中找对应的值
String parameterValue = parametersMap.get(parameterName); //-->13777777777
System.out.println(totalStr + "-->" + parameterName + "-->" + parameterValue);
//把原字符串中间的符合规则的字符串,替换为对应参数的值
//${mobilephone} -->13777777777
str = str.replace(totalStr, parameterValue);
}

System.out.println("替换后的字符串:" + str);
}


}

 



标签:java,String,ParameterUtils,--,str,parameterName,字符串,多测师,mobilephone
From: https://blog.51cto.com/u_15846941/5797407

相关文章

  • java编程语言中的多态【多测师_王sir】
    多态指的是同一个方法调用,由于对象不同可能会有不同的行为,现实生活中,同一个方法,具体实现会完全不同。比如:同样是调用人的“休息”方法,张三是睡觉,李四是旅游,某某是敲代码,数学......
  • Java中的泛型【多测师_王sir】【软件测试】
    泛型是编译期特性,你只要记住加上就是约束了、限制了,编译期只能加某个类型的对象,计算编译期限制了,实际上在运行期还能把泛型擦除的,可以把泛型理解为一种约束即可。但是运行期......
  • 经典的Java面试题【多测师_王sir】
    packageduoceshi.test;publicclassDuoceshi{publicstaticfloatsum(floatp,floatq,intm,intn){floatsum=0f;//如果购买的商品数量n小......
  • Java知识33 集合框架 List接口 Map 和set【多测师】
    一、Java集合框架1.Java提供的特设类如:DictionaryVectorStack和Properties这些类来储存和操作对象组2.通过这些接口实现集合如:LinkedListHashSet和TreeSet,集合框架是......
  • Java知识32 数据结构 枚举 向量【多测师】
    一、Java数据结构包含以下几种接口和类:枚举(Enumeration)位集合()向量()栈()字典()哈希表()属性()二、java枚举接口实例演示Enumeration的用法:publicclassEnumerationTest......
  • Java设计模式之单例模式、工厂模式、PO模式【多测师_王sir】
    一)、工厂模式工厂模式(FactoryPattern)是Java中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。定义一个创建对象的接口,让其子......
  • java知识31 void 、实例化对象后面带参数、 实例变量(重点)【多测师】
    1.publicstaticvoidmain(String[]args)String[]args为字符串数组的变量名不是关键字2.Java变量局部变量//作用域方法里面类变量(静态变量)//用static修饰符修饰成......
  • Java知识30 package【多测师】
    一、包语句语法格式packagepkg1[.pkg2[.pkg3…]];一个something.Java文件packagenet.java.util;publicclassSomething{...}那么它的路径应该是net/java/util/Somethi......
  • java知识28 Java封装【多测师】
    一、面向对象中,封装是指将抽象性函式接口的实现细节部分包装、隐藏起来的方法1.封装可以被认为是一个屏障,防止该类的代码和数据被外部类定义的代码随机访问2.要访问该类代码......
  • Java知识29 接口【多测师】
    一、接口Java中,接口是一个抽象类型,是抽象方法的集合,接口通常以interface来声明,一个类通过继承接口的方式来继承接口的抽象方法1.接口不是类,编写接口的方式和类相似,类描述对......