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的更多相关文章

  1. 浅谈 Java 字符串(String, StringBuffer, StringBuilder)

    我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看 API 会发现,String ...

  2. java中 String StringBuffer StringBuilder的区别

    * String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...

  3. 重温java中的String,StringBuffer,StringBuilder类

    不论什么一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类经常使用的有 3 个: String.StringBuffer.StringBuilder ...

  4. 关于String StringBuffer StringBuilder

    0. String对象的创建       1.关于类对象的创建,很普通的一种方式就是利用构造器,String类也不例外:String s=new String("Hello world&qu ...

  5. [改善Java代码]正确使用String,StringBuffer,StringBuilder

    CharSequence接口有三个实现类与字符串有关:String,StringBuffer,StringBuffer.虽然它们都与字符串有关,但是其处理机制是不同的. String类是不可改变的量, ...

  6. [置顶] String StringBuffer StringBuilder的区别剖析

    这是一道很常见的面试题目,至少我遇到过String/StringBuffer/StringBuilder的区别:String是不可变的对象(final)类型,每一次对String对象的更改均是生成一个 ...

  7. String StringBuffer StringBuilder (转)

    转自:http://www.iteye.com/topic/522167 众所周知,String是由字符组成的串,在程序中使用频率很高.Java中的String是一个类,而并非基本数据类型. 不过她却 ...

  8. 【Java基础】String StringBuffer StringBuilder

    String String是不可变的 我们都知道String不是基本数据类型,而是一个对象,并且是final类型的,不可变的.(public final class String) 查看以下代码: S ...

  9. String,StringBuffer,StringBuilder的区别及其源码分析

    String,StringBuffer,StringBuilder的区别这个问题几乎是面试必问的题,这里做了一些总结: 1.先来分析一下这三个类之间的关系 乍一看它们都是用于处理字符串的java类,而 ...

随机推荐

  1. ADO.NET 的五个对象

    首先来一张关系图,了解大概关系. 知道了整个大关系之后,我们在具体看一下他们五个的分工: 1. SqlConnection 在访问数据时,我们首先必须要建立数据库的物理连接.· 2.SqlComman ...

  2. yuan的第二次随笔

    第一题: 计算两数的和与差 设计思路: 1:看题目:主函数与函数声明,知道它要你干什么 2:理解与分析:在main中,定义两个实数a,b;要你求两数的和与差 3:解答:通过调用函数sum_diff,指 ...

  3. mysql数据库-定义函数-存储过程写法

    ------------- mysql  定义自定义函数写法 DELIMITER $$ USE `iwmsdb`$$ DROP FUNCTION IF EXISTS `F_WM_DBNAME`$$ C ...

  4. Python全栈之路----函数进阶----装饰器

    Python之路,Day4 - Python基础4 (new版) 装饰器 user_status = False #用户登录后改为True def login(func): #传入想调用的函数名 de ...

  5. php 图片缩放然后合成并保存

    /** * 功能说明 * 将files/model_24/images/下的所有图片文件进行等比例缩放 到$image40w 尺寸 然后放到files/model_24/model.png图片的指定位 ...

  6. API Gateway : Kong

    what problems 多个服务要写自己的log,auth,对于比较耗时的,有时还要高流量限制. solution intro 单点部署的情况: why not just haproxy log ...

  7. 记账本NABCD分析

    学生记账本NABCD分析 N(Need,需求) 随着我们进入大学开始逐步的扩大自己的消费水平,而我们每天无法准确的记住一笔一笔的消费记录.常常,每一个月末时我们在宿舍楼道听到不少学生抱怨这个月怎么花钱 ...

  8. Java高级特性 第4节 输入输出流

    一.使用I/O操作文件 关键步骤: 使用File类操作文件或目录属性 使用FileInputStream类读文本文件 使用FileOutputStram类写文本文件 使用BufferedReader类 ...

  9. 装系统时 System clock uses UTC 问题

    装系统也装了至少不下50次了,每次都是傻瓜一样的按照第一印象在弄,从未想过为啥,装到这里的时候,System clock uses UTC 勾不勾呢,每次都是百度,然后装完这一次下一次又忘了,这是没有 ...

  10. Docker常用命令(四)

    通过一些例子来了解基本的命令使用   1.查看docker信息       docker info         2.安装完Docker后,里面还有任何镜像,先从仓库下载一个基础镜像,然后在这个基础 ...