Java Android使用递归方法来查找和着色找到的文本

Java Android使用递归方法来查找和着色找到的文本,java,android,Java,Android,我正在尝试使用递归方法查找字符串上的标记,删除它,然后对找到的文本着色。但我的代码无法返回正确的字符串,因为在从字符串中删除标记以使其着色后,已删除所有具有正确位置的标记 我的递归方法工作得很好,但在返回字符串之后,我遇到了问题,我有一个带有最后标记项的字符串 String str = "11111111<mft:A>2222222</mft:A>1111111<mft:S>33333333</mft:S> <mft:A>999

我正在尝试使用递归方法查找字符串上的标记,删除它,然后对找到的文本着色。但我的代码无法返回正确的字符串,因为在从字符串中删除标记以使其着色后,已删除所有具有正确位置的标记

我的递归方法工作得很好,但在返回字符串之后,我遇到了问题,我有一个带有最后标记项的字符串

String str     = "11111111<mft:A>2222222</mft:A>1111111<mft:S>33333333</mft:S> <mft:A>99999</mft:A><mft:S>v44444444/mft:S><mft:R>555555</mft:R><mft:S>6666666</mft:S><mft:A>7777777</mft:A>111111";


String nonTags = extractAyehTags(str);
//result is: 1111111122222221111111<mft:S>33333333</mft:S> <mft:A>99999</mft:A><mft:S>v44444444/mft:S><mft:R>555555</mft:R><mft:S>6666666</mft:S><mft:A>7777777</mft:A>111111

Spannable WordToSpan = new SpannableStringBuilder(nonTags);

for (int p = 0; p < ayeHaPositions.size(); p++) {
    WordToSpan.setSpan(new ForegroundColorSpan(Color.BLUE), ayeHaPositions.get(p).getStart(), ayeHaPositions.get(p).getEnd(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}

welcome_message.setText(WordToSpan);
String str=“11111111 222222 1111111111 33333333 9999 v4444444/mft:S>555555 6666666 7777777 111111”;
字符串nonTags=extractAyehTags(str);
//结果是:111111112222111111113333339999444444/mft:S>55555566666667777771111
Spannable WordToSpan=新SpannableStringBuilder(非标记);
对于(int p=0;p
删除标记和获取找到的文本位置的递归方法

private String extractAyehTags(String str) {
    String  nonTags    = str;
    Pattern mftA_REGEX = Pattern.compile("<mft:A>(.+?)</mft:A>");

    Matcher matcher = mftA_REGEX.matcher(str);

    if (matcher.find()) {
        String found = matcher.group(1);

        int start = str.indexOf(found.trim());

        ayeHaPositions.add(new AyehaTagsInformation(start - ("<mft:A>".length()), (start + found.length()) - ("</mft:A>".length()), found));
        nonTags = str.replace("<mft:A>" + matcher.group(1) + "</mft:A>", matcher.group(1));

        extractAyehTags(nonTags);
    }
    return nonTags;
}
private String extractAyehTags(String str){
字符串nonTags=str;
Pattern mftA_REGEX=Pattern.compile(“(.+?)”);
Matcher Matcher=mftA_REGEX.Matcher(str);
if(matcher.find()){
找到的字符串=matcher.group(1);
int start=str.indexOf(found.trim());
添加(新的AyehaTagsInformation(开始-(“”.length()),(开始+找到的.length())-(“”.length()),找到的));
nonTags=str.replace(“+matcher.group(1)+”,matcher.group(1));
提取层标记(非标记);
}
返回非标记;
}

更改递归方法后解决的问题:

private String extractAyehTags(String str) {
    nonTags = str;
    Pattern mftA_REGEX = Pattern.compile("<mft:A>(.+?)</mft:A>");

    Matcher matcher = mftA_REGEX.matcher(str);

    if (matcher.find()) {
        String found = matcher.group(1);

        int start = str.indexOf(found);

        ayeHaPositions.add(new AyehaTagsInformation(start - ("<mft:A>".length()), (start + found.length()+1) - ("</mft:A>".length()), found));
        nonTags = str.replace("<mft:A>" + matcher.group(1) + "</mft:A>", matcher.group(1));

        return extractAyehTags(nonTags);
    }
    return nonTags;
}
我把它改为:

return extractAyehTags(nonTags);
return extractAyehTags(nonTags);