前两篇中已经说了一下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的简单的介绍。简单一点就
网友评论