java中字符串模版的使用

工作中我们难免会遇到字符串的处理,如果字符串简单点我们可以采用字符串相加、StringBuffer或者StringBuilder来处理。

遇到复杂的字符串时,采用字符串模版或者是个不错的选择。

java中自带的2种方式

String.format("my name is %s, and i like %s!", "L.cm", "java");
MessageFormat.format("my name is {0}, and i like {1}!", "L.cm", "java");

之前工作中使用的字符串模版工具类

/**
 * 将字符串中特定模式的字符转换成map中对应的值
 * 
 * use: format("my name is ${name}, and i like ${like}!", {"name":"L.cm", "like": "Java"})
 * 
 * @param s		需要转换的字符串
 * @param map	转换所需的键值对集合
 * @return		转换后的字符串
 */
public static String format(String s, Map<String, String> map) {
	StringBuilder sb = new StringBuilder((int)(s.length() * 1.5));
	int cursor = 0;
	for (int start, end; (start = s.indexOf("${", cursor)) != -1 && (end = s.indexOf('}', start)) != -1;) {
		sb.append(s.substring(cursor, start));
		String key = s.substring(start + 2, end).trim();
		sb.append(map.get(key));
		cursor = end + 1;
	}
	sb.append(s.substring(cursor, s.length()));
	return sb.toString();
}

mybatis中的字符串模版

具体实现在org.apache.ibatis.parsing包中!

public static void main(String[] args) {
	String text = "my name is ${name}, and i like ${like}!";
	
	Properties variables = new Properties();
	variables.setProperty("name", "L.cm");
	variables.setProperty("like", "Java");
	
	System.out.println(PropertyParser.parse(text, variables));
}

mybatis中sql模版处理的源码org.apache.ibatis.builder.SqlSourceBuilder。

使用Spring el实现字符串模版

public class User {
	private String name;
	private String like;
	
	// 省略get set
}

public static void main(String[] args) {
	String text = "my name is ${name}, and i like ${like}!";
	
	ExpressionParser parser = new SpelExpressionParser();
	TemplateParserContext templateContext = new TemplateParserContext("${", "}");//默认使用的#{}
	Expression expression = parser.parseExpression(text, templateContext);

	System.out.println(expression.getValue(new User("L.cm", "Java")));
}

当然另外还有Beetl等更强大的字符串模版引擎。

捐助共勉
版权声明:若无特殊注明,本文皆为原创,转载请保留文章出处。