Android中五大字符串总结(String、StringBuffer、StringBuilder、Spanna
https://www.aliyun.com/jiaocheng/2861.html?spm=5176.100033.1.35.2ed56b03CbsYFK
摘要:String、StringBuffer、StringBuilder来自JDKSpannableString、SpannableStringBuilder来自Android的API先简单分析一下来自JDK的三个字符串的区别:String:“字符串常量”(即定义字符串过后,就不能改变对象本身)StringBuffer:“字符串变量”,线性安全StringBuilder:“字符串变量”,线性不安全我们再来分析一下Android中的API的字符串:SpannableString:“字
String、StringBuffer、StringBuilder来自JDK
SpannableString、SpannableStringBuilder来自Android的API先简单分析一下来自JDK的三个字符串的区别:
String:“字符串常量”(即定义字符串过后,就不能改变对象本身)
StringBuffer : “字符串变量”,线性安全
StringBuilder : “字符串变量”,线性不安全
我们再来分析一下Android中的API的字符串:
SpannableString: “字符串常量”,可与TextView搭配改变显示样式的字符串
SpannableStringBuilder : “字符串变量”,可与TextView搭配改变显示样式的字符串
具体分析:
来一段String的代码:
String str = "Hello World";
str = str+"!";
System.out.print(str);// result : Hello World!这儿的str对象就改变了,不是说str是“字符串常量”,不是不能改变吗?但是上面说的是不能改变对象本身,这儿str的改变相当于是新建一个字符串对象,然后将新建的字符串对象赋值给str,也就说str已经不再是原来的str了
String与StringBuffer的对比
String str = "Hello " + "World" + "!";
StringBuffer strBuffer= new StringBuffer("Hello ").append("World").append("!");上面的代码你会发现String的创建速度很快,StringBuffer根本不占什么优势,那是因为String的创建相当于直接是String str = “Hello World!”,如果你改成下面这段代码,你就知道他们巨大的差别了
String str2 = "Hello "
String str3 = "World";
String str4 = "!";
String str1 = str2 +str3 + str4;
StringBuffer strBuffer= new StringBuffer("Hello ");
strBuffer.append("World")
strBuffer.append("!");这时你会发现String与StringBuffer有很大的创建时间差别,String因为每次都需创建一个字符串对象,它的时间就会比StringBuffer耗时更久!
StringBuffer与StringBuilder的区别在于StringBuffer是线性安全的,StringBuilder是线性不安全的,什么是线性安全?线性安全是当程序中多个线程对同一个字符串操作时,StringBuilder无法保证在同一时刻只有一个线程对字符串操作,而StringBuffer它就能够保证线性安全,当然在耗时上StringBuffer要比StringBuilder耗时更久一点,但平时我们一般都在单线程中操作字符串,所以一般建议我们使用StringBuilder
SpannableString、SpannableStringBuilder和String的对比:
先来张图:

<textview
android:id="@+id/activity_main_content_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="love is foam"
android:layout_marginTop="20dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/activity_main_content_1"/>
<textview
android:id="@+id/activity_main_content_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="One's mind settles as still water"
android:layout_marginTop="20dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/activity_main_content_2"/>
<textview
android:id="@+id/activity_main_content_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Eat without words and sleep without words"
android:layout_marginTop="20dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/activity_main_content_3"/>
<textview
android:id="@+id/activity_main_content_5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="When the mountains are high, the mountains are small"
android:layout_marginTop="20dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/activity_main_content_4"/>
<textview
android:id="@+id/activity_main_content_6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Jungle law"
android:layout_marginTop="20dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/activity_main_content_5"/>最后听说低版本的Android系统在TextView设置ClickableSpan与OnClickListener时,会出现两个事件会被同时触发,所以这儿给了个参考解决办法
SpannableString与SpannableStringBuilder设置样式的主要的方法:
通过使用setSpan(Object what, int start, int end, int flags)改变文本样式。
对应的参数:
start: 指定Span的开始位置
end: 指定Span的结束位置,并不包括这个位置。
flags:取值有如下四个
Spannable. SPAN_INCLUSIVE_EXCLUSIVE:前面包括,后面不包括,即在文本前插入新的文本会应用该样式,而在文本后插入新文本不会应用该样式
Spannable. SPAN_INCLUSIVE_INCLUSIVE:前面包括,后面包括,即在文本前插入新的文本会应用该样式,而在文本后插入新文本也会应用该样式
Spannable. SPAN_EXCLUSIVE_EXCLUSIVE:前面不包括,后面不包括
Spannable. SPAN_EXCLUSIVE_INCLUSIVE:前面不包括,后面包括
what: 对应的各种Span,不同的Span对应不同的样式。已知的可用类有:
BackgroundColorSpan : 文本背景色
ForegroundColorSpan : 文本颜色
MaskFilterSpan : 修饰效果,如模糊(BlurMaskFilter)浮雕
RasterizerSpan : 光栅效果
StrikethroughSpan : 删除线
SuggestionSpan : 相当于占位符
UnderlineSpan : 下划线
AbsoluteSizeSpan : 文本字体(绝对大小)
DynamicDrawableSpan : 设置图片,基于文本基线或底部对齐。
ImageSpan : 图片
RelativeSizeSpan : 相对大小(文本字体)
ScaleXSpan : 基于x轴缩放
StyleSpan : 字体样式:粗体、斜体等
SubscriptSpan : 下标(数学公式会用到)
SuperscriptSpan : 上标(数学公式会用到)
TextAppearanceSpan : 文本外貌(包括字体、大小、样式和颜色)
TypefaceSpan : 文本字体
URLSpan : 文本超链接
ClickableSpan : 点击事件参考资料
String、StringBuffer与StringBuilder之间区别
【Android】强大的SpannableStringBuilder
Android项目实战(一): SpannableString与SpannableStringBuilder
以上是
Android中五大字符串总结(String、StringBuffer、StringBuilder、Spanna
- 的内容,更多
字符串StringBuilderStringBuffer五大Android总结SpannaString
- 的内容,请您使用右上方搜索功能获取相关信息。
Android中五大字符串总结(String、StringBuffer、StringBuilder、Spanna的更多相关文章
- 浅谈 Java 字符串(String, StringBuffer, StringBuilder)
我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看 API 会发现,String ...
- java中 String StringBuffer StringBuilder的区别
* String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...
- 重温java中的String,StringBuffer,StringBuilder类
不论什么一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类经常使用的有 3 个: String.StringBuffer.StringBuilder ...
- 关于String StringBuffer StringBuilder
0. String对象的创建 1.关于类对象的创建,很普通的一种方式就是利用构造器,String类也不例外:String s=new String("Hello world&qu ...
- [改善Java代码]正确使用String,StringBuffer,StringBuilder
CharSequence接口有三个实现类与字符串有关:String,StringBuffer,StringBuffer.虽然它们都与字符串有关,但是其处理机制是不同的. String类是不可改变的量, ...
- [置顶] String StringBuffer StringBuilder的区别剖析
这是一道很常见的面试题目,至少我遇到过String/StringBuffer/StringBuilder的区别:String是不可变的对象(final)类型,每一次对String对象的更改均是生成一个 ...
- String StringBuffer StringBuilder (转)
转自:http://www.iteye.com/topic/522167 众所周知,String是由字符组成的串,在程序中使用频率很高.Java中的String是一个类,而并非基本数据类型. 不过她却 ...
- 【Java基础】String StringBuffer StringBuilder
String String是不可变的 我们都知道String不是基本数据类型,而是一个对象,并且是final类型的,不可变的.(public final class String) 查看以下代码: S ...
- String,StringBuffer,StringBuilder的区别及其源码分析
String,StringBuffer,StringBuilder的区别这个问题几乎是面试必问的题,这里做了一些总结: 1.先来分析一下这三个类之间的关系 乍一看它们都是用于处理字符串的java类,而 ...
随机推荐
- clearfix 用法
如果有一个DIV作为外部容器,内部的DIV如果设置了float样式,则外部的容器DIV因为内部没有 clear,导致不能被撑开.看下面的例子:Div布局如下:Css代码如下:.out{border:1 ...
- Android版本28使用http请求报错not permitted by network security policy
Android版本28使用http请求报错not permitted by network security policy android模拟器调试登录的时候报错 CLEARTEXT communic ...
- django模型系统一
django模型系统一 1.数据库的连接配置 django连接mysql的配置流程 安装pymysql ** pip install pymysql 修改配置 修改setting的配置文 ...
- 《DSP using MATLAB》Problem 7.10
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- SSH原理及操作
1:公钥与私钥(public and private key) 公钥:提供给远程主机进行数据加密的行为 私钥:远程主机收到客户端使用公钥加密数据后,在本地端使用私钥来解密 2:公钥与私钥进行数据传输时 ...
- Vue 表单校验 vee-validate
gitHub 地址:https://github.com/baianat/vee-validate 官网API 地址:https://baianat.github.io/vee-validate/ap ...
- PHP批量保存图片到服务器再上传阿里云
/* * 批量传输产品主图到阿里云 */ public function transferImage(){ $num = 50; $p = isset($this->request->ge ...
- C语言小程序:除去字符串中间不需要的字符(从小引发大思考)
#include <stdio.h>#include <conio.h> void fun(char *a, char *h, char *p){ char b[81]; ch ...
- 关于Verilog中begin-end & fork-join
转载:http://blog.sina.com.cn/s/blog_6c7b6f030101cpgt.html begin-end and fork-join are used to combi ...
- perl二维数组
[转载]出处:http://www.cnblogs.com/visayafan/ 1 数组与引用 2 声明的区别 3 访问的区别 4 添加行元素 5 添加列元素 6 访问与打印 6.1 运算符优先级 ...