实现C#中String.format{0}
Java实现
注意:Java有String.format("%s,%d",)这种,也蛮好用
/**
* 需要引入com.alibaba.fastjson.1.2.8
* 两种调用方式
* String template1="我是{0},今年{1}了";
* String template2="我是{name},今年{age}了";
* String result1=HuaatUtil.format(template1,"loogn",22);
* String result2=HuaatUtil.format(template2, "{'name':'loogn','age':22}");//注意JSON写法
* 两个结果都是"我是loogn,今年22了"
* arguments[0].getClass().getName() == String.class.getName()
*/
public static String format(String str, Object ... arguments) {
if(arguments.length>0){
if(arguments.length==1 && arguments[0] instanceof String){//{name:"loogn",age:22}
try{
@SuppressWarnings("unchecked")
Map<String, Object> map = (Map<String,Object>)JSON.parse(arguments[0].toString());
for(Map.Entry<String,Object> entry : map.entrySet()){
str=str.replaceAll("\\{" + entry.getKey() + "\\}", entry.getValue().toString());//注意正则写法
}
}catch(Exception e){//解决 ("我是{0},今年了","whaozl") bug
str = str.replaceAll("\\{0\\}", arguments[0].toString());
}
}else {//"loogn",22);
for(int i=0; i<arguments.length; i++){
if(arguments[i]!=null){
str = str.replaceAll("\\{" + i + "\\}", arguments[i].toString());
}
}
}
}
return str;
}
public static void main(String[] args) {
String template1="我是{0},今年{1}了";
String template2="我是{name},今年{age}了";
String result1=HuaatUtil.format(template1,"loogn",22);
String result2=HuaatUtil.format(template2, "{'name':'loogn','age':22}");//注意JSON写法
System.out.println(result1 + "\n" + result2);
}
JavaScript实现
/**
*在参考网址上改进版
*两种调用方式
*var template1="我是{0},今年{1}了";
*var template2="我是{name},今年{age}了";
*var result1=template1.format("loogn",22);
*var result2=template2.format({name:"loogn",age:22});
*两个结果都是"我是loogn,今年22了"
*/
String.prototype.format = function (args) {
var result = this;
if (arguments.length > 0) {
if (arguments.length == 1 && typeof (args) == "object") {
for (var key in args) {
if (args[key] != undefined) {
var reg = new RegExp("({" + key + "})", "g");
result = result.replace(reg, args[key]);
}
}
}
else {
for (var i = 0; i < arguments.length; i++) {
if (arguments[i] != undefined) {
//var reg = new RegExp("({[" + i + "]})", "g");//这个在索引大于9时会有问题,谢谢何以笙箫的指出
var reg = new RegExp("({)" + i + "(})", "g");
result = result.replace(reg, arguments[i]);
}
}
}
}
return result;