package com.example.demo.utils; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; public class StringUtils { public static boolean isCarNo(String carNo){ if (carNo == null) { return false; } if (carNo.length() >= 7 && carNo.length() <= 8){ Pattern p = Pattern.compile("^([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[a-zA-Z](([ABCDF]((?![IO])[a-zA-Z0-9](?![IO]))[0-9]{4})|([0-9]{5}[ABCDF]))|[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1})$"); Matcher m = p.matcher(carNo); if (!m.matches()){ return false; } return true; }else{ return false; } } //参数类型是Map 因为支付只能用string的参数。如果诸君还需要修改的话,那也可以适当的做调整 /** * * map转str * @param map * @return */ public static String getMapToString(Map map){ Set keySet = map.keySet(); //将set集合转换为数组 String[] keyArray = keySet.toArray(new String[keySet.size()]); //给数组排序(升序) Arrays.sort(keyArray); //因为String拼接效率会很低的,所以转用StringBuilder。博主会在这篇博文发后不久,会更新一篇String与StringBuilder开发时的抉择的博文。 StringBuilder sb = new StringBuilder(); for (int i = 0; i < keyArray.length; i++) { // 参数值为空,则不参与签名 这个方法trim()是去空格 if (map.get(keyArray[i]).trim().length() > 0) { sb.append(keyArray[i]).append("=").append(map.get(keyArray[i]).trim()); } if(i != keyArray.length-1){ sb.append("&"); } } return sb.toString(); } /** * 2018年10月24日更新 * String转map * @param str * @return */ public static Map getStringToMap(String str){ //感谢bojueyou指出的问题 //判断str是否有值 if(null == str || "".equals(str)){ return null; } //根据&截取 String[] strings = str.split("&"); //设置HashMap长度 int mapLength = strings.length; //判断hashMap的长度是否是2的幂。 if((strings.length % 2) != 0){ mapLength = mapLength+1; } Map map = new HashMap<>(mapLength); //循环加入map集合 for (int i = 0; i < strings.length; i++) { //截取一组字符串 String[] strArray = strings[i].split("="); //strArray[0]为KEY strArray[1]为值 map.put(strArray[0],strArray[1]); } return map; } }