StringSubstitutor
是 Apache Commons Text 库中的一个类,用于处理字符串模板。它允许通过提供变量名和值的映射来替换字符串中的占位符。下面是 StringSubstitutor
的基本用法示例:
1. 添加依赖
首先,需要在项目中引入 Apache Commons Text 库。可以通过 Maven 或 Gradle 来管理依赖。
Maven:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.10.0</version>
</dependency>
Gradle:
implementation 'org.apache.commons:commons-text:1.10.0'
2. 使用示例
2.1 简单的字符串替换
import org.apache.commons.text.StringSubstitutor;
import java.util.HashMap;
import java.util.Map;
public class StringSubstitutorExample {
public static void main(String[] args) {
// 创建变量与值的映射
Map<String, String> valuesMap = new HashMap<>();
valuesMap.put("name", "Alice");
valuesMap.put("age", "30");
// 创建模板字符串
String templateString = "My name is ${name} and I am ${age} years old.";
// 使用 StringSubstitutor 进行替换
StringSubstitutor sub = new StringSubstitutor(valuesMap);
String resolvedString = sub.replace(templateString);
System.out.println(resolvedString); // 输出: My name is Alice and I am 30 years old.
}
}
2.2 自定义占位符前后缀
默认情况下,占位符是以 ${
开始,以 }
结束的。你可以自定义这些前缀和后缀。
import org.apache.commons.text.StringSubstitutor;
import java.util.HashMap;
import java.util.Map;
public class CustomDelimiterExample {
public static void main(String[] args) {
// 创建变量与值的映射
Map<String, String> valuesMap = new HashMap<>();
valuesMap.put("name", "Alice");
valuesMap.put("age", "30");
// 创建模板字符串,使用自定义前后缀
String templateString = "My name is <<name>> and I am <<age>> years old.";
// 自定义占位符前后缀
StringSubstitutor sub = new StringSubstitutor(valuesMap, "<<", ">>");
String resolvedString = sub.replace(templateString);
System.out.println(resolvedString); // 输出: My name is Alice and I am 30 years old.
}
}
2.3 嵌套替换
StringSubstitutor
支持嵌套替换,即一个变量的值也可以包含需要替换的占位符。
import org.apache.commons.text.StringSubstitutor;
import java.util.HashMap;
import java.util.Map;
public class NestedExample {
public static void main(String[] args) {
// 创建变量与值的映射
Map<String, String> valuesMap = new HashMap<>();
valuesMap.put("name", "Alice");
valuesMap.put("greeting", "Hello, ${name}");
// 创建模板字符串
String templateString = "${greeting}! How are you?";
// 使用 StringSubstitutor 进行替换
StringSubstitutor sub = new StringSubstitutor(valuesMap);
String resolvedString = sub.replace(templateString);
System.out.println(resolvedString); // 输出: Hello, Alice! How are you?
}
}
2.4 使用默认值
StringSubstitutor
允许在变量未找到时使用默认值,格式为 ${variableName:-defaultValue}
。
import org.apache.commons.text.StringSubstitutor;
import java.util.HashMap;
import java.util.Map;
public class DefaultValueExample {
public static void main(String[] args) {
// 创建变量与值的映射
Map<String, String> valuesMap = new HashMap<>();
valuesMap.put("name", "Alice");
// 创建模板字符串
String templateString = "My name is ${name} and I am ${age:-25} years old.";
// 使用 StringSubstitutor 进行替换
StringSubstitutor sub = new StringSubstitutor(valuesMap);
String resolvedString = sub.replace(templateString);
System.out.println(resolvedString); // 输出: My name is Alice and I am 25 years old.
}
}
总结
StringSubstitutor
提供了强大的字符串模板替换功能,支持自定义占位符、嵌套替换和默认值等特性,适用于各种字符串模板的处理场景。