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的對比:


      先來張圖:


      Android中五大字符串總結(String、StringBuffer、StringBuilder、Spanna
      <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

      的內容,更多 

字符串 StringBuilder StringBuffer 五大Android 總結 Spanna String 

      的內容,請您使用右上方搜索功能獲取相關信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM