java - 使用 SpannableStringBuilder 更改文本
问题描述
我想在被(*)包围时制作文本,它会是粗体,被(〜)包围它会是罢工。我按照此链接并将代码修改为这样
text = "*~TEST~* *TEST* ~TEST~ TEST";
texview.setText(createSpannable(text))
private static SpannableStringBuilder createSpannable(final String str) {
StringBuffer stringBuffer = new StringBuffer();
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
//Matcher matcher = BOLD_REGEX.matcher(str);
Matcher matcher = Pattern.compile("(\\*(.*?)\\*)|(~(.*?)~)").matcher(str); //BOLD | STRIKE
while (matcher.find()) {
String group = matcher.group();
stringBuffer.setLength(0);
if (BOLD_REGEX.matcher(group).matches()) {//(\*(.*?)\*)
String spanText = group.substring(1, group.length() - 1);
matcher.appendReplacement(stringBuffer, spanText);
spannableStringBuilder.append(stringBuffer.toString());
int start = spannableStringBuilder.length() - spanText.length();
spannableStringBuilder.setSpan(new StyleSpan(BOLD), start, spannableStringBuilder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
if (STRIKE_REGEX.matcher(spannableStringBuilder).matches()) {
createSpannable(spannableStringBuilder.toString());
}
}
if (STRIKE_REGEX.matcher(group).matches()) {//(~(.*?)~)
String spanText1 = group.substring(1, group.length() - 1);
matcher.appendReplacement(stringBuffer, spanText1);
spannableStringBuilder.append(stringBuffer.toString());
int start1 = spannableStringBuilder.length() - spanText1.length();
spannableStringBuilder.setSpan(new StrikethroughSpan(), start1, spannableStringBuilder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
if (BOLD_REGEX.matcher(spannableStringBuilder).matches()) {
createSpannable(spannableStringBuilder.toString());
}
}
}
stringBuffer.setLength(0);
matcher.appendTail(stringBuffer);
spannableStringBuilder.append(stringBuffer.toString());
return spannableStringBuilder;
}
期望输出:
我的输出:
我怎样才能做到这一点?
解决方案
推荐阅读
- c# - 如何获得测试用例 testcleanup 失败的测试结果
- javascript - 如何在 React 中获取 Google Place 服务?地点服务为空
- python - 使用 Transformer 进行时间序列预测
- javascript - Vue JS - 遍历计算属性以显示年份列表
- sql - jpa sql获取另一列中具有唯一值的所有行的限制1
- javascript - 在数组数组中搜索数组的最有效方法
- python - 如何在熊猫数据框中同时基于 3 个列中的唯一性检索行?
- excel - Powershell 使用 ImportExcel 删除行
- javascript - 如何获取 JSON 数组的唯一数组元素的长度
- css - 为什么最后一种格式不会覆盖早期的格式?