public abstract class StrTemplate extends Object
Modifier and Type | Class and Description |
---|---|
protected static class |
StrTemplate.AbstractBuilder<BuilderChild extends StrTemplate.AbstractBuilder<BuilderChild,TemplateChild>,TemplateChild extends StrTemplate>
抽象Builder
|
static class |
StrTemplate.Feature
格式化 和 解析 策略
同组内的策略是互斥的,一但设置为组内的某个新策略,就会清除之前的同组策略,仅保留新策略
|
Modifier and Type | Field and Description |
---|---|
static char |
DEFAULT_ESCAPE
转义符 默认值
|
protected String |
defaultValue
占位符 没有找到 对应的填充值时 使用的默认值,如果没有,则使用
defaultValueHandler 提供默认值,
如果也没有,使用 globalDefaultValueHandler ,还是没有,则抛出异常 |
protected UnaryOperator<String> |
defaultValueHandler
当前模板的默认值处理器,根据 占位变量 返回 默认值
|
protected char |
escape
转义符,默认为:
CharPool.BACKSLASH
转义符如果标记在 占位符的开始或者结束 之前,则该占位符无效,属于普通字符串的一部分例如,转义符为 '/',占位符为 "{}": 当字符串模板为 "I am /{}" 时,该模板中没有任何需要替换的占位符,格式化结果为 "I am {}" 如果要打印转义符,使用双转义符即可,例如,转义符为 '/',占位符为 "{}": 当字符串模板为 "I am //{}" ,格式化参数为 "student", 格式化结果为 "I am /student" |
protected int |
fixedTextTotalLength
模板中的固定文本长度,序列化时用于计算最终文本长度
|
protected static UnaryOperator<String> |
globalDefaultValueHandler
全局默认值处理器,一旦修改,对所有模板对象都生效
根据 占位符变量 返回 默认值
|
protected static int |
globalFeatures
全局默认策略,一旦修改,对所有模板对象都生效
该值 是每个模板对象创建时的 策略初始值,因此,修改全局默认策略,不影响已经创建的模板对象
|
protected List<AbstractPlaceholderSegment> |
placeholderSegments
所有占位符
|
protected List<StrTemplateSegment> |
segments
模板中的所有固定文本和占位符
|
Modifier | Constructor and Description |
---|---|
protected |
StrTemplate(String template,
char escape,
String defaultValue,
UnaryOperator<String> defaultValueHandler,
int features)
构造
|
Modifier and Type | Method and Description |
---|---|
protected void |
addLiteralSegment(boolean isLastLiteralSegment,
List<StrTemplateSegment> list,
String newText)
添加 固定文本segment,过滤 空字符串 并 合并相邻的固定文本
|
protected void |
afterInit()
一些公共的初始化代码
由于此时子类还没构造完成,所以只能由子类构造方法调用
|
protected String |
formatBySegment(Function<AbstractPlaceholderSegment,?> valueSupplier)
根据 策略 和 默认值 处理需要序列化的值, 生成 格式化字符串
依次遍历模板中的 占位符,根据 占位符 返回 需要序列化的值
|
protected String |
formatMissingKey(AbstractPlaceholderSegment segment)
根据 策略 返回 格式化参数中 找不到 占位符 时的默认值
例如,map中没有 占位符变量 这个key;基于下标的参数中,找不到 占位符下标 对应的 列表元素
|
protected String |
formatNullValue(AbstractPlaceholderSegment segment)
根据 策略 返回 占位符 对应的值为
null 时的返回值 |
String |
formatRawByKey(Function<String,String> valueSupplier)
根据 原始数据 生成 格式化字符串
依次遍历模板中的 占位符,根据 占位符 返回 需要序列化的值
不对 占位符 和 参数值 做任何处理,由用户抉择
|
String |
formatRawBySegment(Function<AbstractPlaceholderSegment,String> valueSupplier)
根据 原始数据 生成 格式化字符串
依次遍历模板中的 占位符,根据 占位符 返回 需要序列化的值
不对 占位符 和 参数值 做任何处理,由用户抉择
|
protected String |
formatSequence(Iterable<?> iterable)
按顺序使用 迭代器元素 替换 占位符
|
protected String |
getDefaultValue(AbstractPlaceholderSegment segment)
根据 占位符 返回默认值
根据定义的默认值、默认值提供者、全局默认值提供者,返回默认值
|
int |
getFeatures()
获取 当前模板的 策略值
|
protected List<AbstractPlaceholderSegment> |
getPlaceholderSegments()
获取 模板中的 占位符 segment
|
List<String> |
getPlaceholderTexts()
获取 所有占位符的完整文本列表
例如,"{}"->"{}"、"{name}"->"{name}"
|
List<String> |
getPlaceholderVariableNames()
获取 所有占位变量名称列表
例如,"{}"->"{}"、"{name}"->"name"
|
protected List<StrTemplateSegment> |
getSegments()
获取 模板中 所有segment
|
String |
getTemplate()
获取 模板字符串
|
protected boolean |
hasDefaultValue()
是否有默认值
|
boolean |
isMatches(String str)
校验 传入的字符串 是否和模板匹配
|
void |
matchesByKey(String str,
BiConsumer<String,String> keyValueConsumer)
根据 策略 和 默认值 获得最终的 value,由消费者处理该 value
|
protected void |
matchesByKey(String str,
BiConsumer<String,String> keyValueConsumer,
boolean hasDefaultValue,
Function<AbstractPlaceholderSegment,String> defaultValueSupplier)
根据 策略 和 默认值 获得最终的 value,由消费者处理该 value
|
void |
matchesRawByKey(String str,
BiConsumer<String,String> keyValueConsumer)
原始数据的解析方法
不对 占位符 和 解析得到的值 做任何处理,由用户抉择
|
void |
matchesRawBySegment(String str,
BiConsumer<AbstractPlaceholderSegment,String> keyValueConsumer)
原始数据的解析方法
不对 占位符 和 解析得到的值 做任何处理,由用户抉择
|
protected List<String> |
matchesSequence(String str)
将 占位符位置的值 按顺序解析为 字符串列表
|
static SinglePlaceholderStrTemplate.Builder |
of(String template)
创建 单占位符模板对象的 Builder
例如,"{}", "?"
|
static NamedPlaceholderStrTemplate.Builder |
ofNamed(String template)
创建 有前缀和后缀的占位符模板对象的 Builder
例如,"{0}", "{name}", "#{name}"
|
protected abstract List<StrTemplateSegment> |
parseSegments(String template)
将 模板 解析为 Segment 列表
|
static void |
setGlobalDefaultValue(UnaryOperator<String> globalDefaultValueHandler)
设置 全局默认值处理器,一旦修改,对所有模板对象都生效
|
static void |
setGlobalFeatures(StrTemplate.Feature... globalFeatures)
设置 全局默认策略,一旦修改,对所有模板对象都生效
该值 是每个模板对象创建时的 策略初始值,因此,修改全局默认策略,不影响已经创建的模板对象
|
public static final char DEFAULT_ESCAPE
protected static int globalFeatures
该值 是每个模板对象创建时的 策略初始值,因此,修改全局默认策略,不影响已经创建的模板对象
protected static UnaryOperator<String> globalDefaultValueHandler
根据 占位符变量 返回 默认值
protected final char escape
CharPool.BACKSLASH
转义符如果标记在 占位符的开始或者结束 之前,则该占位符无效,属于普通字符串的一部分
例如,转义符为 '/',占位符为 "{}":
当字符串模板为 "I am /{}" 时,该模板中没有任何需要替换的占位符,格式化结果为 "I am {}"
如果要打印转义符,使用双转义符即可,例如,转义符为 '/',占位符为 "{}":
当字符串模板为 "I am //{}" ,格式化参数为 "student", 格式化结果为 "I am /student"
protected final String defaultValue
defaultValueHandler
提供默认值,
如果也没有,使用 globalDefaultValueHandler
,还是没有,则抛出异常protected final UnaryOperator<String> defaultValueHandler
protected List<StrTemplateSegment> segments
protected List<AbstractPlaceholderSegment> placeholderSegments
protected int fixedTextTotalLength
protected StrTemplate(String template, char escape, String defaultValue, UnaryOperator<String> defaultValueHandler, int features)
template
- 字符串模板escape
- 转义符defaultValue
- 默认值defaultValueHandler
- 默认值处理器features
- 策略值public static SinglePlaceholderStrTemplate.Builder of(String template)
例如,"{}", "?", "$$$"
template
- 字符串模板public static NamedPlaceholderStrTemplate.Builder ofNamed(String template)
例如,"{0}", "{name}", "#{name}"
template
- 字符串模板public static void setGlobalFeatures(StrTemplate.Feature... globalFeatures)
该值 是每个模板对象创建时的 策略初始值,因此,修改全局默认策略,不影响已经创建的模板对象
globalFeatures
- 全局默认策略public static void setGlobalDefaultValue(UnaryOperator<String> globalDefaultValueHandler)
globalDefaultValueHandler
- 全局默认处理器,根据 占位符变量 返回 默认值public String getTemplate()
public int getFeatures()
public boolean isMatches(String str)
str
- 校验字符串,应该是由格式化方法生成的字符串public List<String> getPlaceholderVariableNames()
例如,"{}"->"{}"、"{name}"->"name"
public List<String> getPlaceholderTexts()
例如,"{}"->"{}"、"{name}"->"{name}"
public String formatRawByKey(Function<String,String> valueSupplier)
依次遍历模板中的 占位符,根据 占位符 返回 需要序列化的值
不对 占位符 和 参数值 做任何处理,由用户抉择
valueSupplier
- 根据 占位符 返回 需要序列化的值的字符串形式,例如:key -> map.get(key)
public String formatRawBySegment(Function<AbstractPlaceholderSegment,String> valueSupplier)
依次遍历模板中的 占位符,根据 占位符 返回 需要序列化的值
不对 占位符 和 参数值 做任何处理,由用户抉择
valueSupplier
- 根据 占位符 返回 需要序列化的值的字符串形式,例如:segment -> map.get(segment.getPlaceholder())
protected String formatSequence(Iterable<?> iterable)
iterable
- iterableprotected String formatBySegment(Function<AbstractPlaceholderSegment,?> valueSupplier)
依次遍历模板中的 占位符,根据 占位符 返回 需要序列化的值
valueSupplier
- 根据 占位符 返回 需要序列化的值,如果返回值不是 String
,则使用 StrUtil.utf8Str(Object)
方法转为字符串protected String formatMissingKey(AbstractPlaceholderSegment segment)
例如,map中没有 占位符变量 这个key;基于下标的参数中,找不到 占位符下标 对应的 列表元素
segment
- 占位符protected String formatNullValue(AbstractPlaceholderSegment segment)
null
时的返回值segment
- 占位符null
时的返回值public void matchesRawByKey(String str, BiConsumer<String,String> keyValueConsumer)
不对 占位符 和 解析得到的值 做任何处理,由用户抉择
str
- 待解析的字符串keyValueConsumer
- 消费 占位符变量名称 和 占位符对应的解析得到的字符串值,例如:(key, value) -> map.put(key, value)
public void matchesRawBySegment(String str, BiConsumer<AbstractPlaceholderSegment,String> keyValueConsumer)
不对 占位符 和 解析得到的值 做任何处理,由用户抉择
str
- 待解析的字符串keyValueConsumer
- 消费 占位符 和 占位符对应的解析得到的字符串值,例如:(key, value) -> map.put(key, value)
protected List<String> matchesSequence(String str)
str
- 待解析的字符串,一般是格式化方法的返回值public void matchesByKey(String str, BiConsumer<String,String> keyValueConsumer)
str
- 待解析的字符串keyValueConsumer
- 按占位符顺序 消费 占位符变量 和 最终的value,例如:(key, value) -> map.put(key, value)
protected void matchesByKey(String str, BiConsumer<String,String> keyValueConsumer, boolean hasDefaultValue, Function<AbstractPlaceholderSegment,String> defaultValueSupplier)
str
- 待解析的字符串keyValueConsumer
- 按占位符顺序 消费 占位符变量 和 最终的value,例如:(key, value) -> map.put(key, value)
hasDefaultValue
- 是否有默认值defaultValueSupplier
- 默认值提供者,根据 占位符 返回 默认值protected boolean hasDefaultValue()
protected String getDefaultValue(AbstractPlaceholderSegment segment)
根据定义的默认值、默认值提供者、全局默认值提供者,返回默认值
segment
- 占位符protected void afterInit()
由于此时子类还没构造完成,所以只能由子类构造方法调用
protected void addLiteralSegment(boolean isLastLiteralSegment, List<StrTemplateSegment> list, String newText)
isLastLiteralSegment
- 上一个新增的segment是否是固定文本list
- 已保存的segment列表newText
- 新的固定文本protected abstract List<StrTemplateSegment> parseSegments(String template)
template
- 字符串模板protected List<StrTemplateSegment> getSegments()
protected List<AbstractPlaceholderSegment> getPlaceholderSegments()
Copyright © 2025. All rights reserved.