gpt4 book ai didi

java - SpannableStringBuilder 用 Regex 替换内容

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:12:16 24 4
gpt4 key购买 nike

我有以下代码,其中我将用 SpannableString 标记大括号之间的内容并删除大括号,但它给出了错误的结果。

String text = "the {quic}k brown {fox} jumps {over} the lazy dog. {A Quick} {brow}nfoxjumpsoverthelazydog";

tv.setText(makeSpannable(text, "\\{.*?\\}"));
public SpannableStringBuilder makeSpannable(String text, String regex) {
SpannableStringBuilder spannable = new SpannableStringBuilder(text);
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(spannable.toString());
while (matcher.find()) {
String word = matcher.group();
String abbr = word.toString().substring(1, word.length() - 1);
spannable.setSpan(new ForegroundColorSpan(Color.RED), matcher.start(), matcher.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.replace(matcher.start(), matcher.start() + abbr.length() , abbr);
}
return spannable;
}

输入:

the {quic}k brown {fox} jumps {over} the lazy dog. {A Quick} {brow}nfoxjumpsoverthelazydog

输出: enter image description here

最佳答案

String text = "the {quic}k brown {fox} jumps {over} the lazy dog. {A Quick} {brow}nfoxjumpsoverthelazydog";

tv.setText(makeSpannable(text, "\\{.*?\\}"));

public SpannableStringBuilder makeSpannable(String text, String regex) {

StringBuffer sb = new StringBuffer();
SpannableStringBuilder spannable = new SpannableStringBuilder();

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
sb.setLength(0); // clear
String group = matcher.group();
// caution, this code assumes your regex has single char delimiters
String spanText = group.substring(1, group.length() - 1);
matcher.appendReplacement(sb, spanText);

spannable.append(sb.toString());
int start = spannable.length() - spanText.length();

spannable.setSpan(new ForegroundColorSpan(Color.RED), start, spannable.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
sb.setLength(0);
matcher.appendTail(sb);
spannable.append(sb.toString());
return spannable;
}

关于java - SpannableStringBuilder 用 Regex 替换内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40006444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com