I am working in a wiki-like parser that creates spans for a set of markup tokens. It is working, but inside the token iterator I frequently need to convert the partial results on a SpannableStringBuilder
to a SpannableString
. This is called pretty frequently, so I'm after the most efficient solution to do it, and avoid creating extra objects.
At the moment I'm using;
SpannableStringBuilder stuff=complex_routine_that_builds_it();
SpannableString result=SpannableString.valueOf(stuff);
However this valueOf
call internally builds a SpannableString
kind of from scratch, doing a toString
and a loop to copy assigned spans
.
As SpannableStringBuilder
name suggests, I think that maybe there's a quicker way to get the SpannableString
from the builder. Is it true?
There is no need to convert a SpannableStringBuilder
to a SpannableString
when you can use it directly, as in a TextView
:
SpannableStringBuilder stuff = complex_routine_that_builds_it();
textView.setText(stuff);
As the question already showed, you could make the conversion if you absolutely had to by
SpannableStringBuilder stuff = complex_routine_that_builds_it();
SpannableString result = SpannableString.valueOf(stuff);
but you should consider why you would even need to make that conversion? Just use the original SpannableStringBuilder
.
SpannableString
vs SpannableStringBuilder
The difference between these two is similar to the difference between String
and StringBuilder
. A String
is immutable but you can change the text in a StringBuilder
.
Similarly, the text in a SpannableString
is immutable while the text in a SpannableStringBuilder
is changeable. It is important to note, though, that this only applies to the text. The spans on both of them (even a SpannableString
) can be changed.
Related