最近做一个需求,发送短信. 不同短信模板 参数个数/类型不一样:
public void Test(){ // 短信模板 String message_model = "尊敬的【0】先生/女士,有一笔订单需要您及时审核,订单号:【1】,客户姓名:【2】。"; // 判断是否 需要值替换 --> 模板包含数字 if(HasDigit(message_model)){ // 取出数字 --> 需要替换的值 Object [] array = extractDigitList(message_model).toArray(); String [] searchList = new String[array.length] ; // 数组拷贝 // System.arraycopy(原数组, 原数组的开始位置, 目标数组, 目标数组的开始位置, 拷贝个数) System.arraycopy(array,0,searchList,0,array.length); // Arrays.copyOf(array,array.length); 也可以实现数组拷贝,底层也实现了System.arraycopy(...) // 替换的 value String [] replacementList = {"大王","1001","小白"}; /* Apache的StringUtils.replaceEach
* 需要替换的文本 , 索引位置集合 , 替换的值 集合 */ String message = StringUtils.replaceEach(message_model,searchList,replacementList); // 结果--> 尊敬的【大王】先生/女士,有一笔订单需要您及时审核,订单号:【1001】,客户姓名:【小白】。 System.out.println("短信内容:-->"+message); }} // 判断一个字符串是否含有数字 public boolean HasDigit(String content) { boolean flag = false; Pattern p = Pattern.compile(".*\\d+.*"); Matcher m = p.matcher(content); if (m.matches()) { flag = true; } return flag; } // 提取字符串中的数字 public List extractDigitList(String replaceStr){ List<String> digitList = new ArrayList<String>(); Pattern pattern = Pattern.compile("[^0-9]"); Matcher matcher = pattern.matcher(replaceStr); String result = matcher.replaceAll(""); for (int i = 0; i < result.length(); i++) { digitList.add(result.substring(i, i+1)); } return digitList ; }