美文网首页
Android中SpannableString使用(三)---S

Android中SpannableString使用(三)---S

作者: __Witness | 来源:发表于2018-12-03 18:08 被阅读0次

    前两篇中已经说了一下SpannableString在Android中的简单的使用,这篇就最后再总结SpannableString,SpannableStringBuilder,String以及StringBuilder之间的区别吧。

    String

    The {@code String} class represents character strings. All
    string literals in Java programs, such as {@code "abc"}, are
    implemented as instances of this class.

    public final class String
        implements java.io.Serializable, Comparable<String>, CharSequence {}
    

    String,这个并没有好说的。实现了CharSequence接口,就是一个字符串而已。String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。

    StringBuilder

    A mutable sequence of characters. This class provides an API compatible
    with {@code StringBuffer}, but with no guarantee of synchronization.
    This class is designed for use as a drop-in replacement for
    {@code StringBuffer} in places where the string buffer was being
    used by a single thread (as is generally the case). Where possible,
    it is recommended that this class be used in preference to
    {@code StringBuffer} as it will be faster under most implementations.

    public final class StringBuilder
        extends AbstractStringBuilder
        implements java.io.Serializable, CharSequence
    {}
    
    abstract class AbstractStringBuilder implements Appendable, CharSequence {}
    

    从官方定义可以看出StringBuilder就是一个可扩展的字符串。
    1,StringBuilder 对象是动态对象,允许扩充它所封装的字符串中字符的数量,但是您可以为它可容纳的最大字符数指定一个值,当修改 StringBuilder 时,在达到容量之前,它不会为其自己重新分配空间。当达到容量时,将自动分配新的空间且容量翻倍。可以使用重载的构造函数之一来指定 StringBuilder 类的容量。

    2,对于简单的字符串连接操作,在性能上stringBuilder并不一定总是优于string。因为stringBuider对象创建代价较大,在字符串目标连接较少的情况下,过度滥用stringBuilder会导致性能的浪费,只有大量的或者无法预知次数的字符串操作,才考虑stringBuilder来实现。

    3,方法

    • append(String str)/append(Char c):字符串连接
    • appendcodePoint(int cp):追加一个代码点,并将其转换为一个或两个代码单元并返回this
    • delete(int startIndex,int endIndex):删除起始位置(含)到结尾位置(不含)之间的字符串

    SpannableString

    This is the class for text whose content is immutable but to which
    markup objects can be attached and detached.
    For mutable text, see {@link SpannableStringBuilder}.

    大体意思是:这是文本的类,该文本的内容是不可变的,但可以附加和分离标记对象。对于可变文本,请参见SpannableStringBuilder。

    SpannableString的详细介绍请看前两篇。

    SpannableStringBuilder

    This is the class for text whose content and markup can both be changed.

    public class SpannableStringBuilder implements CharSequence, GetChars, Spannable, Editable,
            Appendable, GraphicsOperations {}
    

    相比SpannableString它也实现了一个Appendable接口。从而变成了一个可扩展的SpannableString,其他的用法基本和SpannableString相同。SpanableStringBuilder也是对大量SpanableString拼接进行处理的,也同样使用append方法。

    String beforeText = "SpanableStringBuilder";
    String afterText = "的扩展方法";
    SpannableStringBuilder builder = new SpannableStringBuilder(beforeText);
    builder.append(afterText);
    builder.setSpan(...);
    textView.setText(builder);
    

    这些就是String,StringBuilder,SpannableString和SpannableStringBuilder的简单的介绍。简单一点就

    StringBuilder是可扩展的String,SpannableString是可设置不同类型Span的String,而SpannableStringBuilder又是可以扩展的SpannableString。

    相关文章

      网友评论

          本文标题:Android中SpannableString使用(三)---S

          本文链接:https://www.haomeiwen.com/subject/tjqucqtx.html