前言:
TextUtils类是系统自带的一个工具类,里面包含了一些静态方法,是处理一些常见的有关Text的工具的集合方法类。今天我们就来大致学习一下这个类里都包含了什么内容……
准备
在学习这个类之前,先来了解一些其他的内容,便于学习。
CharSequence 类
这个类的实现类有我们常用的String、StringBuffer、StringBuilder等,因此在TextUtils类中Text的表示形式一般都是使用CharSequence。
TextUtils类
首先看一下构造方法,发现其构造方法是私有的,不能进行new来创建。一般的工具类,都是提供一些单一的方法,一般方法都使用static进行修饰,所以new来创建是没有意义的。这也是一般的工具类的写法。
方法
这里一般只介绍公有的方法,不包括private、hide等标注或者修饰的方法。
getChars()
// 内部实现是通过调用不同CharSequence的实现类的getChars方法来实现
// 将获取的chars放在了dest数组内
getChars(CharSequence s, int start, int end, char[] dest, int destoff){}
indexOf()
// 这是一个系列的方法
// 该方法用于获取当前char在指定的CharSequence的位置坐标,并可以设置区间和前后顺序
indexOf(CharSequence s, char ch)
indexOf(CharSequence s, char ch, int start)
indexOf(CharSequence s, char ch, int start, int end)
lastIndexOf(CharSequence s, char ch)
lastIndexOf(CharSequence s, char ch, int last)
lastIndexOf(CharSequence s, char ch, int start, int last)
indexOf(CharSequence s, CharSequence needle)
indexOf(CharSequence s, CharSequence needle, int start)
indexOf(CharSequence s, CharSequence needle, int start, int end)
regionMatches()
// 将字符串one与two的指定区域匹配则返回true,否则返回false
// 内部实现将两个字符串中需要比较的部分合并为一个char[]后进行前后比较
// one:匹配字符串
// two:指定字符串
// toffset/ooffset:字符串的偏移量
// len:匹配的长度
regionMatches(CharSequence one, int toffset, CharSequence two, int ooffset, int len)
substring()
// 截取原字符串中的一部分返回
// 内部实现如果是String、StringBuffer、StringBuilder则分别调用他们的substring()方法,
// 否则将原字符串内的需要截取的部分放入一个char[]中,然后转化为String
// source:原字符串
// start:起始偏移量
// end:结束偏移量
String substring(CharSequence source, int start, int end)
join()
// 在一个数组中的元素之间添加一个delimiter,最后返回一个String
// 此算法非常巧妙的解决了输入问题顾前不顾后的问题,希望看源码理解
// delimiter:需要插入的内容
// tokens:原数组、集合游标
String join(CharSequence delimiter, Object[] tokens)
String join(CharSequence delimiter, Iterable tokens)
split()
// 将字符串以另一个字符串为匹配分拆成字符串数组
// text:原字符串
// expression:匹配的字符串、正则
String[] split(String text, String expression)
String[] split(String text, Pattern pattern)
stringOrSpannedString()
// 获取String或者SpannedString
CharSequence stringOrSpannedString(CharSequence source)
isEmpty()
// 判断空
// 为空返回true
// str == null || str.length() == 0
boolean isEmpty(@Nullable CharSequence str)
getTrimmedLength()
// 获取字符串除去首位空格的长度
// 内部实现分别从前和从后获取空格的长度,然后总长度减去空格的长度
int getTrimmedLength(CharSequence s)
equals()
// 两个字符串进行对比
// 内部实现如果两种==则直接返回,然后判断是否为空并且长度是否相等,
// 然后判断如果是String类型的则调用String.equals(),否则分别charAt()进行比较
boolean equals(CharSequence a, CharSequence b)
getReverse()
// 这是一个Deprecated标注的类
// 将字CharSequence中的某一部分进行反转
CharSequence getReverse(CharSequence source, int start, int end)
writeToParcel()
// 将CharSequence写入Parcel
writeToParcel(CharSequence cs, Parcel p, int parcelableFlags)
dumpSpans()
// 打印cs中的Span,prefix会在打印每个Span开始出现。printer,可以用LogPrinter,这样就可以打印在 log 里。
dumpSpans(CharSequence cs, Printer printer, String prefix)
replace()
// 替换功能,template出现的sources替换为destinations,注意:只会替换第一个出现的。
CharSequence replace(CharSequence template, String[] sources, CharSequence[] destinations)
expandTemplate()
//替换template当中的^1`` ^2 等为values中相应的值,注意:不能超过9个,9个以上会抛出异常。
CharSequence expandTemplate(CharSequence template, CharSequence... values)
// 例子:
String template = "This is a ^1 of the ^2 broadcast ^3.";
CharSequence expandTemplate = TextUtils.expandTemplate(template, "test", "emergency", "system");
getOffsetBefore()/getOffsetAfter()
// 获取文本之前或之后的偏移量
int getOffsetBefore(CharSequence text, int offset)
int getOffsetAfter(CharSequence text, int offset)
copySpansFrom()
// 从source中start到end 中的span复制到dest中,destoff是偏移量。
copySpansFrom(Spanned source, int start, int end, Class kind, Spannable dest, int destoff)
ellipsize()
// 相当于 TextView 的 xml 中ellipsize,这里可以回调省略范围的 index,
// 同时也可用通过preserveLength,设置返回的 CharSequence 的长度为原始长度还是省略后的长度,
// 这里利用的”零宽不换行空格符”来占位,where参数可以用
// TextUtils.TruncateAt.START,TextUtils.TruncateAt.END,TextUtils.TruncateAt.MIDDLE和TextUtils.TruncateAt.MARQUEE,
// 分别是开始,结尾,中间和跑马灯。
CharSequence ellipsize(CharSequence text, TextPaint p, float avail, TruncateAt where)
CharSequence ellipsize(CharSequence text, TextPaint paint, float avail, TruncateAt where, boolean preserveLength, EllipsizeCallback callback)
CharSequence ellipsize(CharSequence text, TextPaint paint, float avail, TruncateAt where, boolean preserveLength, EllipsizeCallback callback, TextDirectionHeuristic textDir, String ellipsis)
htmlEncode()
// encode html
String htmlEncode(String s)
concat()
// text 为可变参数,可以将传入的CharSequence组成一个CharSequence,并保留原有的Span。
CharSequence concat(CharSequence... text)
isGraphic()
// 判断是否有可以显示出来的字符
boolean isGraphic(CharSequence str)
isDigitsOnly()
// 判断是否仅有数字
boolean isDigitsOnly(CharSequence str)
网友评论