Android - 如何在spannableStringBuilder中替换字符串标记

时间:2016-11-27 22:12:12

标签: java android regex

没关系? :d

我有一个API PHP,它接收用字符串[tag]标签替换的html文本,我的Android应用程序需要用Spannable字符串替换这个文本标签。

我在将[strong][br][p][i]替换为SpannableString的字符串标记时遇到问题,并且会对内容文本进行归档。

并非所有文字都被正确覆盖。例如,某些[强]标签仍然存在,有时文本会重复,而不是重叠。

我的活动收到:

...

SpannableStringBuilder parseContent = new StringTagParserHelper(tagPost.getContent())
    .addMultipleStyle();

contentView.setText(parseContent);

My String parser classe是:

public class StringTagParserHelper {

    private static String rawText;
    private SpannableStringBuilder spannableContent;

    public StringTagParserHelper(String text) {
        rawText = text;
    }

    /**
     * @return
     */
    public SpannableStringBuilder addMultipleStyle() {
        spannableContent = new SpannableStringBuilder(rawText);

        cleanTags("strong");

        return spannableContent;
    }

    private void cleanTags(String tag) {
        Pattern pattern = Pattern.compile(tag + "\\](.+?)\\[/" + tag);
        Matcher matcher = pattern.matcher(rawText);

        while (matcher.find()) {
            Log.d("PARSE", String.valueOf(matcher.group(1)));

            String _internal = matcher.group(1);
            int start = matcher.start();
            int end = matcher.end();

            if (tag.equals("strong")) {
                Spannable spanText = new SpannableString(_internal);
                spanText.setSpan(
                        new StyleSpan(Typeface.BOLD), 0, _internal.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
                );

                spannableContent.replace(start, end, spanText);
            }

            if (tag.equals("br")) {
                //
            }

        }
    }

[编辑]

添加了2个屏幕截图。

  • 使用粗体文字和spannable替换spanText
  • 的文字

enter image description here

  • 另一个没有样式和spannable替换_internal字符串。

enter image description here

Log.d()行接收没有标签的原始字符串文本列表。

Log.d("PARSE", String.valueOf(matcher.group(1)));

请帮帮我,伙计们!

参考文献:

Android TextView format multiple words

https://stackoverflow.com/a/6560685/3332734

https://stackoverflow.com/a/32369427/3332734

Android. Replace * character from String

0 个答案:

没有答案