今天在看Guava的Preconditions这个类的源码的时候看到一个占位符替换的实现,我以前的想法都是replace,这个实现是跳过占位符...有点意思,这里记录下.或许以后用得到
/**
* 非常好的替换方法,核心逻辑就是搜索%s然后跳过...
*/
public String format(String template,String[] args){
StringBuilder builder = new StringBuilder(template.length() + 16 * args.length);
int templateStart = 0;
int i = 0;
while (i < args.length) {
// 获得下一个%s起始位
int placeholderStart = template.indexOf("%s", templateStart);
if (placeholderStart == -1) {
break;
}
// 将上一个%s末尾与下一个%s起始位之间的内容写入builder
builder.append(template, templateStart, placeholderStart);
// 将参数写入builder
builder.append(args[i++]);
// 记录下一个截断起始位
templateStart = placeholderStart + 2;
}
// 将最后一个%s之后的内容追加到builder内
builder.append(template, templateStart, template.length());
return builder.toString();
}
只用了2个常见的api就实现了替换功能.以前从来没想到过这种思路,很新颖.
网友评论