String str="出库单号?可导出DRP的出库数量为?,不需要导入目标系统!"; String[] paras = new String[]{"1000001","99"}; for(String para : paras){ str = str.replaceFirst("\\?", para); } System.out.println(str);
看了答案,总结下:
1.MessageFormat,没发现MessageFormat怎么替换问号,可以做模板替换
MessageFormat用法:
String pig = "{0}{1,number,#.##}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}{16}"; String result = MessageFormat.format(pig,"A",5.5,"C","D","E","F","G","H","I","G","K","L","M","N","O","P","Q"); System.out.println(result); // 最终结果是:ABCDEFGHIJKLMNOPQ String message = "oh, {0} is 'a' pig"; result = MessageFormat.format(message, "ZhangSan"); System.out.println(result); // 最终结果是:oh, ZhangSan is a pig message = "oh, {0} is ''a'' pig"; result = new MessageFormat(message).format(message, "Zhangsan"); System.out.println(result); Object[] objs = new Object[]{"张三"}; result = new MessageFormat(message).format(objs); System.out.println(result); // 最终结果是:oh, ZhangSan is 'a' pig message = "oh, '{0}' is a pig"; System.out.println(MessageFormat.format(message, "ZhangSan")); // 最终结果是:oh, {0} is 'a' pig,此处ZhangSan无法显示。 message = "oh, '{0,number,#.#} is a pig"; result = MessageFormat.format(message, 100.5); System.out.println(result); result = new MessageFormat(message).format(new Object[]{100.5}); System.out.println(result); // 最终结果是:oh, {0,number,#.#} is 'a' pig。 message = "oh, {0,number,#.#} is a pig"; System.out.println(MessageFormat. format(message, 3.1)); // 最终结果是:oh, 3.1 is a pig message = "oh, { is a pig"; // 最终结果是:异常java.lang.IllegalArgumentException: Unmatched braces in the pattern message = "oh, } is a pig"; // 最终结果是:oh, } is a pig message = "欢迎光临,当前({0})等待的业务受理的顾客有{1}位,请排号办理业务!"; result =MessageFormat.format(message, new Date(),35); System.out.println(result); // 最终结果是:欢迎光临,当前(15-1-20 下午11:17)等待的业务受理的顾客有35位,请排号办理业务! message = "欢迎光临,当前({0,date,full})等待的业务受理的顾客有{1}位,请排号办理业务!"; result =MessageFormat.format(message, new Date(),35); System.out.println(result); // 最终结果是:欢迎光临,当前(2015年1月20日 星期二)等待的业务受理的顾客有35位,请排号办理业务! /* * 原始的是:"oh, '{0,number,#.#} is a pig";这种的,原始的调用 new MessageFormat(pattern).format(Object para); * 引号 大小括号了解。 */
补充20150528:
注意单引号引用:
System.out.println(MessageFormat.format("您好{0},您的<a class=''blue'' target=''_blank'' href=''/resume/{1}.html''>个人挂证信息</a>已被审核入库,这几天请保持您的电话畅通以便企业/猎头与您联系!", 123,"456"));
System.out.println(MessageFormat.format("您好{0},您的<a class=''blue'' target=''_blank'' href='/resume/{1}.html'>个人挂证信息</a>已被审核入库,这几天请保持您的电话畅通以便企业/猎头与您联系!", 123,"456"));
String str="出库单号?可导出DRP的出库数量为?,不需要导入目标系统!"; String[] paras = new String[]{"1000001","99"}; System.out.println(String.format(str, paras));
new Formatter().format(str, paras).toString()
Formatter f1 = new Formatter(System.out); //格式化输出字符串和数字 f1.format("格式化输出:%s %d", "a", 1235); System.out.println("\n--------"); //日期的格式化 Calendar c = new GregorianCalendar(); f1.format("当前日期:%1$tY-%1$tm-%1$te", c); System.out.println("\n--------"); //日期的格式化,并将格式化结果存储到一个字符串变量中 String s = String.format("当前日期:%1$tY-%1$tm-%1$te", c); System.out.println(s); //2$:取第二个参数 //-: 指定为左对齐,默认右对齐 //5:最大输出宽度为20,不够会补空格,实际若超过则全部输出 //.2:在此表示输出参数2的最大字符数量,如果是浮点数字,则表示小数部分显示的位数 //s :表示输入参数是字符串 f1.format("%2$-5.2s %1$2s", "123", "456"); //将格式化的结果存储到字符串 System.out.println("\n--------"); String fs = String.format("身高体重(%.2f , %d)", 173.2, 65); System.out.println(fs); //printf()本质上也是用System.out作为输出目标构造Formatter对象 //调用format方法,并将printf的参数传给format方法而得。 System.out.println("\n--------"); System.out.printf("身高体重(%.2f , %d)", 180.2, 65);
3.java.text.Format为抽象类,子类有DateFormat,MessageFormat,NumberFormat
4.模板替换工具类
大致这个意思:http://my.oschina.net/haogrgr/blog/222349
5.复下正则
Matcher matcher = Pattern.compile("\\?").matcher(str); StringBuffer sb = new StringBuffer(); for (int i = 0; i < paras.length && matcher.find(); i++) { matcher.appendReplacement(sb, paras[i]); } matcher.appendTail(sb); System.out.println(sb.toString());