从SpannableStringBuilder获取SpannableString的最佳方法

我正在使用类似wiki的parsing器,为一组标记记号创build跨度。 它正在工作,但在令牌迭代器中,我经常需要将SpannableStringBuilder上的部分结果转换为SpannableString 。 这被称为相当频繁,所以我追求最有效的解决scheme,并避免创build额外的对象。

目前我正在使用;

 SpannableStringBuilder stuff=complex_routine_that_builds_it(); SpannableString result=SpannableString.valueOf(stuff); 

然而,这个valueOf调用在内部构build了一个从头开始的SpannableStringtypes,做了一个toString和一个循环来复制指定的spans

正如SpannableStringBuilder名字所暗示的,我认为也许有一种更快捷的方式从构build器中获取SpannableString 。 这是真的吗?

Solutions Collecting From Web of "从SpannableStringBuilder获取SpannableString的最佳方法"

当您可以直接使用SpannableString时,不需要将SpannableStringBuilder转换为SpannableStringBuilder ,就像在TextView

 SpannableStringBuilder stuff = complex_routine_that_builds_it(); textView.setText(stuff); 

正如已经显示的问题,如果您绝对必须通过转换,您可以进行转换

 SpannableStringBuilder stuff = complex_routine_that_builds_it(); SpannableString result = SpannableString.valueOf(stuff); 

但你应该考虑为什么你甚至需要进行转换? 只需使用原始的SpannableStringBuilder

SpannableString vs SpannableStringBuilder

这两者的区别在于StringStringBuilder的区别。 一个String是不可变的,但是你可以改变一个StringBuilder的文本。

同样, SpannableString中的文本是不可变的,而SpannableString中的文本是可变的。 但是,重要的是要注意,这只适用于文本。 它们的跨度(甚至是一个SpannableString )都可以改变。

有关

  • Android Spanned,SpannedString,Spannable,SpannableString和CharSequence