2017-03-11 3 views
1

Ich versuche rekursive Methode zu verwenden, um Tags auf Zeichenfolge zu finden, entfernen Sie es und färben Sie dann gefundenen Text (e). aber mein code konnte nicht die richtige string als entfernt alle tags mit der richtigen position nach entfernen tags von string für colorize sieAndroid rekursive Methode zum Suchen und Einfärben gefundener Texte

meine rekursive methode funktionieren gut, aber nach der rückkehr string ich habe problem, ich habe string mit letzten etiketten! !

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); 

meine rekursive Methode für Tag entfernen und Textpositionen gefunden zu

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; 
} 

Antwort

1

Problem nach dem rekursiven Änderungsverfahren gelöst:

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; 
} 

Problem war diese Linie:

extractAyehTags(nonTags); 

ich ändere es zu:

return extractAyehTags(nonTags);