[6]字符串String

前言

上節(jié)我們講了函數(shù)接口Predicate的使用,大家感興趣的話可參看以下文章:
[1]Kotlin中的算數(shù)運(yùn)算
[2]二元運(yùn)算符 ?:
[3]Any的使用 - 簡書
[4]數(shù)組
[5]Predicate的使用

今天讓我們來學(xué)習(xí)一下字符串String的相關(guān)知識(shí),涉及內(nèi)容有:
1.StringCharSequence
2.String的那些常用方法
3.封裝類StringUtil的使用
4.StringUtil源碼

一. String 與 CharSequence

在平常的開發(fā)中,我們經(jīng)常會(huì)看到類似以下的代碼:

    @Override
    public CharSequence getTileLabel() {
        return null;
    }

CharSequence是個(gè)啥不清楚,但是我們知道只要是CharSequence,我們就可以用String去代替或者返回。那么CharSequenceString到底是啥關(guān)系呢。翻看CharSequence代碼可以發(fā)現(xiàn):

public interface CharSequence {

    public val length: Int

    public operator fun get(index: Int): Char

    public fun subSequence(startIndex: Int, endIndex: Int): CharSequence
}

CharSequence是一個(gè)接口,它包含了一個(gè)length屬性,還有兩個(gè)方法:get(index: Int)subSequence(startIndex: Int, endIndex: Int)
這兩個(gè)方法和一個(gè)屬性,我們都似曾相識(shí),好像在String時(shí)用過。那么接下來看看String源碼:

public class String : Comparable<String>, CharSequence {
    companion object {}

    @kotlin.internal.IntrinsicConstEvaluation
    public operator fun plus(other: Any?): String

    @kotlin.internal.IntrinsicConstEvaluation
    public override val length: Int

    @kotlin.internal.IntrinsicConstEvaluation
    public override fun get(index: Int): Char

    public override fun subSequence(startIndex: Int, endIndex: Int): CharSequence

    @kotlin.internal.IntrinsicConstEvaluation
    public override fun compareTo(other: String): Int

    @kotlin.internal.IntrinsicConstEvaluation
    public override fun equals(other: Any?): Boolean

    @kotlin.internal.IntrinsicConstEvaluation
    public override fun toString(): String
}

可以發(fā)現(xiàn)String繼承于接口CharSequence,是CharSequence的實(shí)現(xiàn)類。

二. String 的那些常用方法

在日常開發(fā)中,String使用很頻繁。當(dāng)然,它也有很多方法,包括我們常用的equals(),toString()subSequence(...)等??紤]到String的操作方法眾多,我這邊就封裝了一個(gè)StringUtil工具類,便于對(duì)字符串String的操作。

三. 封裝類 StringUtil 的使用

下面給出StringUtilTestActivity中的使用代碼:

package com.example.kdemo.ui.test

import android.os.Build
import android.os.Bundle
import android.view.View
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import com.example.kdemo.R
import com.example.kdemo.databinding.ActivityTestBinding
import com.example.kdemo.util.data.normal.string.StringUtil
import com.example.kdemo.util.log.LogUtil
import com.example.kdemo.util.toast.ToastUtil

class TestActivity : AppCompatActivity(),View.OnClickListener {

    private lateinit var mBinding: ActivityTestBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mBinding = ActivityTestBinding.inflate(layoutInflater)
        setContentView(mBinding.root)

        initData()
        setListener()
    }

    private fun initData() {}

    private fun setListener() {
        mBinding.mBtnTest.setOnClickListener(this)
    }

    @RequiresApi(Build.VERSION_CODES.Q)
    override fun onClick(view: View) {
        when (view.id) {
            R.id.mBtnTest -> {
                test()
            }

            else -> {

            }
        }
    }

    @RequiresApi(Build.VERSION_CODES.Q)
    private fun test() {
        ToastUtil.showShortToast(this, "begin test")

        var str1 = "abcdefgh123"
        LogUtil.i("字符串 $str1 轉(zhuǎn)大寫: ${StringUtil.uppercase(str1)}")

        var str2 = "AbCDE"
        LogUtil.i("字符串 $str2 轉(zhuǎn)小寫: ${StringUtil.lowercase(str2)}")

        var str3 = "abc"
        LogUtil.i("字符串 $str3 首字母轉(zhuǎn)大寫: ${StringUtil.capitalize(str3)}")

        var str4 = "AEC"
        LogUtil.i("字符串 $str4 首字母轉(zhuǎn)小寫: ${StringUtil.decapitalize(str4)}")

        var str5 = "abcadea"
        LogUtil.i("字符串 $str5 去掉首尾'a': ${StringUtil.trim(str5,'a')}")
        LogUtil.i("字符串 $str5 去掉首尾'e','a': ${StringUtil.trim(str5,'e','a')}")

        var str6 = "abcadea"
        LogUtil.i("字符串 $str6 去掉首'a': ${StringUtil.trimStart(str6,'a')}")
        LogUtil.i("字符串 $str6 去掉首'a','b': ${StringUtil.trimStart(str6,'a','b')}")

        var str7 = "abcadea"
        LogUtil.i("字符串 $str7 去掉尾'a': ${StringUtil.trimEnd(str7,'a')}")
        LogUtil.i("字符串 $str7 去掉尾'e','a': ${StringUtil.trimEnd(str7,'e','a')}")

        var str8 = " abcadea "
        LogUtil.i("字符串 $str8 長度:${str8.length}  去掉首尾空格: ${StringUtil.trim(str8)} 后的長度: ${StringUtil.trim(str8).length}")
        LogUtil.i("字符串 $str8 長度:${str8.length}  去掉首空格: ${StringUtil.trimStart(str8)} 后的長度: ${StringUtil.trimStart(str8).length}")
        LogUtil.i("字符串 $str8 長度:${str8.length}  去掉尾空格: ${StringUtil.trimEnd(str8)} 后的長度: ${StringUtil.trimEnd(str8).length}")

        var str9 =" a bc d f"
        LogUtil.i("字符串 $str9 長度:${str9.length}  去掉所有空格: ${StringUtil.removeAllCharNull(str9)} 后的長度: ${StringUtil.removeAllCharNull(str9)?.length}")
        var str10="aaa"
        LogUtil.i("字符串 $str10 長度:${str9.length}  去掉所有'a': ${StringUtil.removeAllCharNull(str10,'a')} 后的長度: ${StringUtil.removeAllCharNull(str10,'a')?.length}")
        var str11=StringUtil.removeAllCharNull(str10,'a')
        LogUtil.i(" isEmpty=${str11?.isEmpty()}  isBlank=${str11?.isBlank()}")

        var str12 = "568"
        var str12Length = 5
        LogUtil.i("字符串 $str12 用0在開頭填充為${str12Length}位數(shù): ${StringUtil.padStart(str12,str12Length,'0')}")
        LogUtil.i("字符串 $str12 用0在開頭填充為2位數(shù): ${StringUtil.padStart(str12,2,'0')}")

        var str13 = "568"
        var str13Length = 6
        LogUtil.i("字符串 $str13 用a在結(jié)尾填充為${str13Length}位數(shù): ${StringUtil.padEnd(str13,str13Length,'a')}")
        LogUtil.i("字符串 $str13 用a在結(jié)尾填充為1位數(shù): ${StringUtil.padEnd(str13,1,'a')}")

        var str14 = "pojdadkfday"
        LogUtil.i("字符串 $str14 截取第一個(gè)'d'之前的所有字符: ${StringUtil.substringBefore(str14,'d')}")
        LogUtil.i("字符串 $str14 截取第一個(gè)'g'之前的所有字符: ${StringUtil.substringBefore(str14,'g')}")
        LogUtil.i("字符串 $str14 截取第一個(gè)字符串\"da\"之前的所有字符: ${StringUtil.substringBefore(str14,"da")}")
        LogUtil.i("字符串 $str14 截取第一個(gè)字符串\"F\"之前的所有字符: ${StringUtil.substringBefore(str14,"F")}")

        LogUtil.i("字符串 $str14 截取第一個(gè)'d'之后的所有字符: ${StringUtil.substringAfter(str14,'d')}")
        LogUtil.i("字符串 $str14 截取第一個(gè)'g'之后的所有字符: ${StringUtil.substringAfter(str14,'g')}")
        LogUtil.i("字符串 $str14 截取第一個(gè)字符串\"da\"之后的所有字符: ${StringUtil.substringAfter(str14,"da")}")
        LogUtil.i("字符串 $str14 截取第一個(gè)字符串\"F\"之后的所有字符: ${StringUtil.substringAfter(str14,"F")}")

        LogUtil.i("字符串 $str14 截取最后一個(gè)'d'之前的所有字符: ${StringUtil.substringBeforeLast(str14,'d')}")
        LogUtil.i("字符串 $str14 截取最后一個(gè)'g'之前的所有字符: ${StringUtil.substringBeforeLast(str14,'g')}")
        LogUtil.i("字符串 $str14 截取最后一個(gè)字符串\"da\"之前的所有字符: ${StringUtil.substringBeforeLast(str14,"da")}")
        LogUtil.i("字符串 $str14 截取最后一個(gè)字符串\"F\"之前的所有字符: ${StringUtil.substringBeforeLast(str14,"F")}")

        LogUtil.i("字符串 $str14 截取最后一個(gè)'d'之后的所有字符: ${StringUtil.substringAfterLast(str14,'d')}")
        LogUtil.i("字符串 $str14 截取最后一個(gè)'g'之后的所有字符: ${StringUtil.substringAfterLast(str14,'g')}")
        LogUtil.i("字符串 $str14 截取最后一個(gè)字符串\"da\"之后的所有字符: ${StringUtil.substringAfterLast(str14,"da")}")
        LogUtil.i("字符串 $str14 截取最后一個(gè)字符串\"F\"之后的所有字符: ${StringUtil.substringAfterLast(str14,"F")}")
        LogUtil.i("字符串 $str14 截取最后一個(gè)字符串\"F\"之后的所有字符,未找到\"F\"則返回\"G\": ${StringUtil.substringAfterLast(str14,"F","G")}")

        var str15 = "abcdefg"
        var startIndex = 0
        var endIndex = 4
        var replacement1 = "xyz"
        LogUtil.i("字符串 $str15 將下標(biāo)${startIndex}-${endIndex}位置的內(nèi)容替換為$replacement1 后的結(jié)果為: ${StringUtil.replaceRange(str15,startIndex,endIndex,replacement1)}")
        var replacement2 = ""
        LogUtil.i("字符串 $str15 將下標(biāo)${startIndex}-${endIndex}位置的內(nèi)容替換為$replacement2 后的結(jié)果為: ${StringUtil.replaceRange(str15,startIndex,endIndex,replacement2)}")

        var str16 = "abcdefg"
        var range1: IntRange = 0 until 3
        var range2: IntRange = 0..3
        var replacement160 = "Uv"
        LogUtil.i("字符串 $str16 將范圍${range1}的內(nèi)容替換為$replacement160 后的結(jié)果為: ${StringUtil.replaceRange(str16,range1,replacement160)}")
        LogUtil.i("字符串 $str16 將范圍${range2}的內(nèi)容替換為$replacement160 后的結(jié)果為: ${StringUtil.replaceRange(str16,range2,replacement160)}")

        var str17 = "abcdefg"
        var startIndex171 = 0
        var endIndex171 = 3
        LogUtil.i("字符串 $str17 將下標(biāo)${startIndex171}-${endIndex171}位置的內(nèi)容移除后的結(jié)果為: ${StringUtil.removeRange(str17,startIndex,endIndex)}")

        var str18 = "abcdefg"
        var range181: IntRange = 0 until 3
        var range182: IntRange = 0..3
        LogUtil.i("字符串 $str18 將范圍${range181}的內(nèi)容移除后的結(jié)果為: ${StringUtil.removeRange(str18,range181)}")
        LogUtil.i("字符串 $str18 將范圍${range182}的內(nèi)容替移除后的結(jié)果為: ${StringUtil.removeRange(str18,range182)}")

        var str19 = "abcdefg"
        var prefix190 = "ab"
        var prefix191 = "ac"
        LogUtil.i("字符串 $str19 刪除前綴 ${prefix190}: ${StringUtil.removePrefix(str19,prefix190)}")
        LogUtil.i("字符串 $str19 刪除前綴 ${prefix191}: ${StringUtil.removePrefix(str19,prefix191)}")

        var str20 = "abcdefg"
        var suffix200 = "fg"
        var suffix201 = "fc"
        LogUtil.i("字符串 $str20 刪除后綴 ${suffix200}: ${StringUtil.removeSuffix(str20,suffix200)}")
        LogUtil.i("字符串 $str20 刪除前綴 ${suffix201}: ${StringUtil.removePrefix(str20,suffix201)}")

        var str21 = "abcdefg"
        var prefix210 = "ab"
        var suffix211 = "fg"
        LogUtil.i("字符串 $str21 刪除前綴${prefix210}與后綴 ${suffix211}: ${StringUtil.removeSurrounding(str21,prefix210,suffix211)}")

        var str22 = "abcdefgab"
        var str23 = "abcdefg"
        var fix220 = "ab"
        LogUtil.i("字符串 $str22 刪除前綴${fix220}與后綴 ${fix220}: ${StringUtil.removeSurrounding(str22,fix220)}")
        LogUtil.i("字符串 $str23 刪除前綴${fix220}與后綴 ${fix220}: ${StringUtil.removeSurrounding(str23,fix220)}")

        var str24 = "abcdef"
        var str240 = "FG"
        var char240 = 'b'
        var char241 = 'W'
        LogUtil.i("字符串 $str24 中第一個(gè)${char240}前的內(nèi)容替換為 $str240 : ${StringUtil.replaceBefore(str24,char240,str240)}")
        LogUtil.i("字符串 $str24 中第一個(gè)${char241}前的內(nèi)容替換為 $str240 : ${StringUtil.replaceBefore(str24,char241,str240,str24)}")
        LogUtil.i("字符串 $str24 中第一個(gè)${char241}前的內(nèi)容替換為 $str240 : ${StringUtil.replaceBefore(str24,char241,str240,"H")}")

        LogUtil.i("字符串 $str24 中第一個(gè)${char240}后的內(nèi)容替換為 $str240 : ${StringUtil.replaceAfter(str24,char240,str240)}")
        LogUtil.i("字符串 $str24 中第一個(gè)${char241}后的內(nèi)容替換為 $str240 : ${StringUtil.replaceAfter(str24,char241,str240,str24)}")
        LogUtil.i("字符串 $str24 中第一個(gè)${char241}后的內(nèi)容替換為 $str240 : ${StringUtil.replaceAfter(str24,char241,str240,"H")}")


        var str25 = "abcdef"
        var str250 = "KO"
        var str251 = "bc"
        var str252 = "gc"
        LogUtil.i("字符串 $str25 中第一個(gè)${str251}前的內(nèi)容替換為 $str250 : ${StringUtil.replaceBefore(str25,str251,str250)}")
        LogUtil.i("字符串 $str25 中第一個(gè)${str252}前的內(nèi)容替換為 $str250 : ${StringUtil.replaceBefore(str25,str252,str250,str24)}")
        LogUtil.i("字符串 $str25 中第一個(gè)${str252}前的內(nèi)容替換為 $str250 : ${StringUtil.replaceBefore(str25,str252,str250,"RF")}")

        LogUtil.i("字符串 $str25 中第一個(gè)${str251}后的內(nèi)容替換為 $str250 : ${StringUtil.replaceAfter(str25,str251,str250)}")
        LogUtil.i("字符串 $str25 中第一個(gè)${str252}后的內(nèi)容替換為 $str250 : ${StringUtil.replaceAfter(str25,str252,str250,str24)}")
        LogUtil.i("字符串 $str25 中第一個(gè)${str252}后的內(nèi)容替換為 $str250 : ${StringUtil.replaceAfter(str25,str252,str250,"RF")}")

        var str26 = "abcdefdkp"
        var str260 = "FG"
        var char260 = 'd'
        var char261 = 'W'
        LogUtil.i("字符串 $str26 中最后一個(gè)${char260}前的內(nèi)容替換為 $str260 : ${StringUtil.replaceBeforeLast(str26,char260,str260)}")
        LogUtil.i("字符串 $str26 中最后一個(gè)${char261}前的內(nèi)容替換為 $str260 : ${StringUtil.replaceBeforeLast(str26,char261,str260,str26)}")
        LogUtil.i("字符串 $str26 中最后一個(gè)${char261}前的內(nèi)容替換為 $str260 : ${StringUtil.replaceBeforeLast(str26,char261,str260,"H")}")

        LogUtil.i("字符串 $str26 中最后一個(gè)${char260}后的內(nèi)容替換為 $str260 : ${StringUtil.replaceAfterLast(str26,char260,str260)}")
        LogUtil.i("字符串 $str26 中最后一個(gè)${char261}后的內(nèi)容替換為 $str260 : ${StringUtil.replaceAfterLast(str26,char261,str260,str26)}")
        LogUtil.i("字符串 $str26 中最后一個(gè)${char261}后的內(nèi)容替換為 $str260 : ${StringUtil.replaceAfterLast(str26,char261,str260,"H")}")

        var str27 = "abcdefbcAS"
        var str270 = "KO"
        var str271 = "bc"
        var str272 = "gc"
        LogUtil.i("字符串 $str27 中最后一個(gè)${str271}前的內(nèi)容替換為 $str270 : ${StringUtil.replaceBeforeLast(str27,str271,str270)}")
        LogUtil.i("字符串 $str27 中最后一個(gè)${str272}前的內(nèi)容替換為 $str270 : ${StringUtil.replaceBeforeLast(str27,str272,str270,str27)}")
        LogUtil.i("字符串 $str27 中最后一個(gè)${str272}前的內(nèi)容替換為 $str270 : ${StringUtil.replaceBeforeLast(str27,str272,str270,"RF")}")

        LogUtil.i("字符串 $str27 中最后一個(gè)${str271}后的內(nèi)容替換為 $str270 : ${StringUtil.replaceAfterLast(str27,str271,str270)}")
        LogUtil.i("字符串 $str27 中最后一個(gè)${str272}后的內(nèi)容替換為 $str270 : ${StringUtil.replaceAfterLast(str27,str272,str270,str27)}")
        LogUtil.i("字符串 $str27 中最后一個(gè)${str272}后的內(nèi)容替換為 $str270 : ${StringUtil.replaceAfterLast(str27,str272,str270,"RF")}")

        var str28 = "a8B9c7"
        var regex28 = Regex("[a-zA-Z]+") //表示一個(gè)或多個(gè)字母
        var str280 = "*"
        LogUtil.i("字符串 $str28 中字母替換為 $str280 : ${StringUtil.replace(str28, regex28, str280)}")

        var str29 = "a8B9a7"
        var regex29 = Regex("[a]") //表示首字母
        LogUtil.i("字符串 $str29 中字母\"a\"替換為\"ps\" : ${StringUtil.replace(str29, regex29, { m -> "ps"})}")

        var str30 = "a5a6a5"
        var str301 = "a6a6a5"
        var regex30 = Regex("[a][5]") //表示匹配字母a5
        LogUtil.i("字符串 $str30 替換首個(gè)滿足 regex30 正則表達(dá)式的內(nèi)容為\"A\" : ${StringUtil.replaceFirst(str30, regex30, "A")}")
        LogUtil.i("字符串 $str301 替換首個(gè)滿足 regex30 正則表達(dá)式的內(nèi)容為\"A\" : ${StringUtil.replaceFirst(str301, regex30, "A")}")


        var str31="abcd"
        var str310="Abgkp"
        LogUtil.i("返回字符串 $str31 和 $str310 的公共前綴(比對(duì)時(shí)不忽略大小寫): ${StringUtil.commonPrefixWith(str31,str310,false)}")
        LogUtil.i("返回字符串 $str31 和 $str310 的公共前綴(比對(duì)時(shí)忽略大小寫[返回小寫前綴]): ${StringUtil.commonPrefixWith(str31,str310,true)}")

        var str32="abcdef"
        var str320="wgheF"
        LogUtil.i("返回字符串 $str32 和 $str320 的公共后綴(比對(duì)時(shí)不忽略大小寫): ${StringUtil.commonSuffixWith(str32,str320,false)}")
        LogUtil.i("返回字符串 $str32 和 $str320 的公共后綴(比對(duì)時(shí)忽略大小寫[返回小寫后綴]): ${StringUtil.commonSuffixWith(str32,str320,true)}")

        //splitToSequence 分割字符串
        var str33="你好,我是|小學(xué)生"
        //多字符分割
        var sequence330 = str33.splitToSequence(",","|")
        //單字符分割
        var sequence331 = str33.splitToSequence(",")
        sequence330.forEach { LogUtil.i("sequence330: $it") }
        sequence331.forEach { LogUtil.i("sequence331: $it") }

        //正則表達(dá)式匹配數(shù)字分割
        var str34="你好,我是1年級(jí)學(xué)生,你是2年級(jí)學(xué)生嗎?你9歲了嗎?"
        var regex340 = Regex("[0-9]") //正則表達(dá)式匹配數(shù)字分割
        var sequence341 = StringUtil.splitToSequence(str34,regex340)
        sequence341.forEach { LogUtil.i("sequence341: $it") }

        //回車,換行分割
        var str35 = "我是中國人,我愛中國。\n我來自家\r鄉(xiāng)小鎮(zhèn),我也愛著\n我的家鄉(xiāng)。"
        LogUtil.i("str35: $str35")
        var sequence350 = StringUtil.lineSequence(str35)
        sequence350.forEach { LogUtil.i("sequence350: $it") }
        var str36 = sequence350.joinToString("")
        LogUtil.i("str36: $str36")

        //字符串?dāng)?shù)組轉(zhuǎn)字符串
        var arrayContent = arrayOf("a","b","c")
        var str37 = arrayContent.joinToString("")
        LogUtil.i("str37: $str37    length=${str37.length}")
        var str370 = StringUtil.removeAllStringNull(str37)
        LogUtil.i("str37: $str37   removeAllStringNull length=${str37.length}")
        var sequence370 = str370?.splitToSequence("")
        sequence370?.filter { StringUtil.isNotEmpty(it) }
            ?.forEach { LogUtil.i("sequence370: $it") }

    }


}

運(yùn)行結(jié)果如下:

19:54:09.377  I  字符串 abcdefgh123 轉(zhuǎn)大寫: ABCDEFGH123
19:54:09.377  I  字符串 AbCDE 轉(zhuǎn)小寫: abcde
19:54:09.377  I  字符串 abc 首字母轉(zhuǎn)大寫: Abc
19:54:09.377  I  字符串 AEC 首字母轉(zhuǎn)小寫: aEC
19:54:09.390  I  字符串 abcadea 去掉首尾'a': bcade
19:54:09.391  I  字符串 abcadea 去掉首尾'e','a': bcad
19:54:09.391  I  字符串 abcadea 去掉首'a': bcadea
19:54:09.391  I  字符串 abcadea 去掉首'a','b': cadea
19:54:09.391  I  字符串 abcadea 去掉尾'a': abcade
19:54:09.391  I  字符串 abcadea 去掉尾'e','a': abcad
19:54:09.391  I  字符串  abcadea  長度:9  去掉首尾空格: abcadea 后的長度: 7
19:54:09.391  I  字符串  abcadea  長度:9  去掉首空格: abcadea  后的長度: 8
19:54:09.391  I  字符串  abcadea  長度:9  去掉尾空格:  abcadea 后的長度: 8
19:54:09.392  I  字符串  a bc d f 長度:9  去掉所有空格: abcdf 后的長度: 5
19:54:09.392  I  字符串 aaa 長度:9  去掉所有'a': null 后的長度: null
19:54:09.392  I   isEmpty=null  isBlank=null
19:54:09.392  I  字符串 568 用0在開頭填充為5位數(shù): 00568
19:54:09.392  I  字符串 568 用0在開頭填充為2位數(shù): 568
19:54:09.392  I  字符串 568 用a在結(jié)尾填充為6位數(shù): 568aaa
19:54:09.392  I  字符串 568 用a在結(jié)尾填充為1位數(shù): 568
19:54:09.392  I  字符串 pojdadkfday 截取第一個(gè)'d'之前的所有字符: poj
19:54:09.392  I  字符串 pojdadkfday 截取第一個(gè)'g'之前的所有字符: pojdadkfday
19:54:09.392  I  字符串 pojdadkfday 截取第一個(gè)字符串"da"之前的所有字符: poj
19:54:09.392  I  字符串 pojdadkfday 截取第一個(gè)字符串"F"之前的所有字符: pojdadkfday
19:54:09.392  I  字符串 pojdadkfday 截取第一個(gè)'d'之后的所有字符: adkfday
19:54:09.392  I  字符串 pojdadkfday 截取第一個(gè)'g'之后的所有字符: pojdadkfday
19:54:09.393  I  字符串 pojdadkfday 截取第一個(gè)字符串"da"之后的所有字符: dkfday
19:54:09.393  I  字符串 pojdadkfday 截取第一個(gè)字符串"F"之后的所有字符: pojdadkfday
19:54:09.393  I  字符串 pojdadkfday 截取最后一個(gè)'d'之前的所有字符: pojdadkf
19:54:09.393  I  字符串 pojdadkfday 截取最后一個(gè)'g'之前的所有字符: pojdadkfday
19:54:09.393  I  字符串 pojdadkfday 截取最后一個(gè)字符串"da"之前的所有字符: pojdadkf
19:54:09.393  I  字符串 pojdadkfday 截取最后一個(gè)字符串"F"之前的所有字符: pojdadkfday
19:54:09.393  I  字符串 pojdadkfday 截取最后一個(gè)'d'之后的所有字符: ay
19:54:09.393  I  字符串 pojdadkfday 截取最后一個(gè)'g'之后的所有字符: pojdadkfday
19:54:09.393  I  字符串 pojdadkfday 截取最后一個(gè)字符串"da"之后的所有字符: y
19:54:09.393  I  字符串 pojdadkfday 截取最后一個(gè)字符串"F"之后的所有字符: pojdadkfday
19:54:09.393  I  字符串 pojdadkfday 截取最后一個(gè)字符串"F"之后的所有字符,未找到"F"則返回"G": G
19:54:09.393  I  字符串 abcdefg 將下標(biāo)0-4位置的內(nèi)容替換為xyz 后的結(jié)果為: xyzefg
19:54:09.393  I  字符串 abcdefg 將下標(biāo)0-4位置的內(nèi)容替換為 后的結(jié)果為: efg
19:54:09.393  I  字符串 abcdefg 將范圍0..2的內(nèi)容替換為Uv 后的結(jié)果為: Uvdefg
19:54:09.393  I  字符串 abcdefg 將范圍0..3的內(nèi)容替換為Uv 后的結(jié)果為: Uvefg
19:54:09.394  I  字符串 abcdefg 將下標(biāo)0-3位置的內(nèi)容移除后的結(jié)果為: efg
19:54:09.394  I  字符串 abcdefg 將范圍0..2的內(nèi)容移除后的結(jié)果為: defg
19:54:09.394  I  字符串 abcdefg 將范圍0..3的內(nèi)容替移除后的結(jié)果為: efg
19:54:09.394  I  字符串 abcdefg 刪除前綴 ab: cdefg
19:54:09.394  I  字符串 abcdefg 刪除前綴 ac: abcdefg
19:54:09.394  I  字符串 abcdefg 刪除后綴 fg: abcde
19:54:09.394  I  字符串 abcdefg 刪除前綴 fc: abcdefg
19:54:09.394  I  字符串 abcdefg 刪除前綴ab與后綴 fg: cde
19:54:09.394  I  字符串 abcdefgab 刪除前綴ab與后綴 ab: cdefg
19:54:09.394  I  字符串 abcdefg 刪除前綴ab與后綴 ab: abcdefg
19:54:09.394  I  字符串 abcdef 中第一個(gè)b前的內(nèi)容替換為 FG : FGbcdef
19:54:09.394  I  字符串 abcdef 中第一個(gè)W前的內(nèi)容替換為 FG : abcdef
19:54:09.394  I  字符串 abcdef 中第一個(gè)W前的內(nèi)容替換為 FG : H
19:54:09.395  I  字符串 abcdef 中第一個(gè)b后的內(nèi)容替換為 FG : abFG
19:54:09.395  I  字符串 abcdef 中第一個(gè)W后的內(nèi)容替換為 FG : abcdef
19:54:09.395  I  字符串 abcdef 中第一個(gè)W后的內(nèi)容替換為 FG : H
19:54:09.395  I  字符串 abcdef 中第一個(gè)bc前的內(nèi)容替換為 KO : KObcdef
19:54:09.395  I  字符串 abcdef 中第一個(gè)gc前的內(nèi)容替換為 KO : abcdef
19:54:09.395  I  字符串 abcdef 中第一個(gè)gc前的內(nèi)容替換為 KO : RF
19:54:09.395  I  字符串 abcdef 中第一個(gè)bc后的內(nèi)容替換為 KO : abcKO
19:54:09.395  I  字符串 abcdef 中第一個(gè)gc后的內(nèi)容替換為 KO : abcdef
19:54:09.395  I  字符串 abcdef 中第一個(gè)gc后的內(nèi)容替換為 KO : RF
19:54:09.395  I  字符串 abcdefdkp 中最后一個(gè)d前的內(nèi)容替換為 FG : FGdkp
19:54:09.395  I  字符串 abcdefdkp 中最后一個(gè)W前的內(nèi)容替換為 FG : abcdefdkp
19:54:09.395  I  字符串 abcdefdkp 中最后一個(gè)W前的內(nèi)容替換為 FG : H
19:54:09.395  I  字符串 abcdefdkp 中最后一個(gè)d后的內(nèi)容替換為 FG : abcdefdFG
19:54:09.395  I  字符串 abcdefdkp 中最后一個(gè)W后的內(nèi)容替換為 FG : abcdefdkp
19:54:09.395  I  字符串 abcdefdkp 中最后一個(gè)W后的內(nèi)容替換為 FG : H
19:54:09.395  I  字符串 abcdefbcAS 中最后一個(gè)bc前的內(nèi)容替換為 KO : KObcAS
19:54:09.395  I  字符串 abcdefbcAS 中最后一個(gè)gc前的內(nèi)容替換為 KO : abcdefbcAS
19:54:09.396  I  字符串 abcdefbcAS 中最后一個(gè)gc前的內(nèi)容替換為 KO : RF
19:54:09.396  I  字符串 abcdefbcAS 中最后一個(gè)bc后的內(nèi)容替換為 KO : abcdefbcKO
19:54:09.396  I  字符串 abcdefbcAS 中最后一個(gè)gc后的內(nèi)容替換為 KO : abcdefbcAS
19:54:09.396  I  字符串 abcdefbcAS 中最后一個(gè)gc后的內(nèi)容替換為 KO : RF
19:54:09.397  I  字符串 a8B9c7 中字母替換為 * : *8*9*7
19:54:09.397  I  字符串 a8B9a7 中字母"a"替換為"ps" : ps8B9ps7
19:54:09.397  I  字符串 a5a6a5 替換首個(gè)滿足 regex30 正則表達(dá)式的內(nèi)容為"A" : Aa6a5
19:54:09.397  I  字符串 a6a6a5 替換首個(gè)滿足 regex30 正則表達(dá)式的內(nèi)容為"A" : a6a6A
19:54:09.398  I  返回字符串 abcd 和 Abgkp 的公共前綴(比對(duì)時(shí)不忽略大小寫): 
19:54:09.398  I  返回字符串 abcd 和 Abgkp 的公共前綴(比對(duì)時(shí)忽略大小寫[返回小寫前綴]): ab
19:54:09.398  I  返回字符串 abcdef 和 wgheF 的公共后綴(比對(duì)時(shí)不忽略大小寫): 
19:54:09.398  I  返回字符串 abcdef 和 wgheF 的公共后綴(比對(duì)時(shí)忽略大小寫[返回小寫后綴]): ef
19:54:09.400  I  sequence330: 你好
19:54:09.401  I  sequence330: 我是
19:54:09.401  I  sequence330: 小學(xué)生
19:54:09.403  I  sequence331: 你好
19:54:09.403  I  sequence331: 我是|小學(xué)生
19:54:09.404  I  sequence341: 你好,我是
19:54:09.404  I  sequence341: 年級(jí)學(xué)生,你是
19:54:09.404  I  sequence341: 年級(jí)學(xué)生嗎?你
19:54:09.404  I  sequence341: 歲了嗎?
19:54:09.405  I  str35: 我是中國人,我愛中國。
                 我來自家鄉(xiāng)小鎮(zhèn),我也愛著
                 我的家鄉(xiāng)。
19:54:09.405  I  sequence350: 我是中國人,我愛中國。
19:54:09.405  I  sequence350: 我來自家
19:54:09.405  I  sequence350: 鄉(xiāng)小鎮(zhèn),我也愛著
19:54:09.405  I  sequence350: 我的家鄉(xiāng)。
19:54:09.405  I  str36: 我是中國人,我愛中國。我來自家鄉(xiāng)小鎮(zhèn),我也愛著我的家鄉(xiāng)。
19:54:09.405  I  str37: abc    length=3
19:54:09.405  I  str37: abc   removeAllStringNull length=3
19:54:09.406  I  sequence370: a
19:54:09.406  I  sequence370: b
19:54:09.406  I  sequence370: c
20:47:13.548  I  字符串 abcdefgh123 轉(zhuǎn)大寫: ABCDEFGH123
20:47:13.548  I  字符串 AbCDE 轉(zhuǎn)小寫: abcde
20:47:13.548  I  字符串 abc 首字母轉(zhuǎn)大寫: Abc
20:47:13.548  I  字符串 AEC 首字母轉(zhuǎn)小寫: aEC
20:47:13.548  I  字符串 abcadea 去掉首尾'a': bcade
20:47:13.549  I  字符串 abcadea 去掉首尾'e','a': bcad
20:47:13.549  I  字符串 abcadea 去掉首'a': bcadea
20:47:13.549  I  字符串 abcadea 去掉首'a','b': cadea
20:47:13.549  I  字符串 abcadea 去掉尾'a': abcade
20:47:13.549  I  字符串 abcadea 去掉尾'e','a': abcad
20:47:13.549  I  字符串  abcadea  長度:9  去掉首尾空格: abcadea 后的長度: 7
20:47:13.549  I  字符串  abcadea  長度:9  去掉首空格: abcadea  后的長度: 8
20:47:13.549  I  字符串  abcadea  長度:9  去掉尾空格:  abcadea 后的長度: 8
20:47:13.549  I  字符串  a bc d f 長度:9  去掉所有空格: abcdf 后的長度: 5
20:47:13.549  I  字符串 aaa 長度:9  去掉所有'a': null 后的長度: null
20:47:13.549  I   isEmpty=null  isBlank=null
20:47:13.549  I  字符串 568 用0在開頭填充為5位數(shù): 00568
20:47:13.549  I  字符串 568 用0在開頭填充為2位數(shù): 568
20:47:13.549  I  字符串 568 用a在結(jié)尾填充為6位數(shù): 568aaa
20:47:13.549  I  字符串 568 用a在結(jié)尾填充為1位數(shù): 568
20:47:13.549  I  字符串 pojdadkfday 截取第一個(gè)'d'之前的所有字符: poj
20:47:13.550  I  字符串 pojdadkfday 截取第一個(gè)'g'之前的所有字符: pojdadkfday
20:47:13.550  I  字符串 pojdadkfday 截取第一個(gè)字符串"da"之前的所有字符: poj
20:47:13.550  I  字符串 pojdadkfday 截取第一個(gè)字符串"F"之前的所有字符: pojdadkfday
20:47:13.550  I  字符串 pojdadkfday 截取第一個(gè)'d'之后的所有字符: adkfday
20:47:13.550  I  字符串 pojdadkfday 截取第一個(gè)'g'之后的所有字符: pojdadkfday
20:47:13.550  I  字符串 pojdadkfday 截取第一個(gè)字符串"da"之后的所有字符: dkfday
20:47:13.550  I  字符串 pojdadkfday 截取第一個(gè)字符串"F"之后的所有字符: pojdadkfday
20:47:13.550  I  字符串 pojdadkfday 截取最后一個(gè)'d'之前的所有字符: pojdadkf
20:47:13.550  I  字符串 pojdadkfday 截取最后一個(gè)'g'之前的所有字符: pojdadkfday
20:47:13.550  I  字符串 pojdadkfday 截取最后一個(gè)字符串"da"之前的所有字符: pojdadkf
20:47:13.550  I  字符串 pojdadkfday 截取最后一個(gè)字符串"F"之前的所有字符: pojdadkfday
20:47:13.550  I  字符串 pojdadkfday 截取最后一個(gè)'d'之后的所有字符: ay
20:47:13.550  I  字符串 pojdadkfday 截取最后一個(gè)'g'之后的所有字符: pojdadkfday
20:47:13.550  I  字符串 pojdadkfday 截取最后一個(gè)字符串"da"之后的所有字符: y
20:47:13.551  I  字符串 pojdadkfday 截取最后一個(gè)字符串"F"之后的所有字符: pojdadkfday
20:47:13.551  I  字符串 pojdadkfday 截取最后一個(gè)字符串"F"之后的所有字符,未找到"F"則返回"G": G
20:47:13.551  I  字符串 abcdefg 將下標(biāo)0-4位置的內(nèi)容替換為xyz 后的結(jié)果為: xyzefg
20:47:13.551  I  字符串 abcdefg 將下標(biāo)0-4位置的內(nèi)容替換為 后的結(jié)果為: efg
20:47:13.551  I  字符串 abcdefg 將范圍0..2的內(nèi)容替換為Uv 后的結(jié)果為: Uvdefg
20:47:13.551  I  字符串 abcdefg 將范圍0..3的內(nèi)容替換為Uv 后的結(jié)果為: Uvefg
20:47:13.551  I  字符串 abcdefg 將下標(biāo)0-3位置的內(nèi)容移除后的結(jié)果為: efg
20:47:13.551  I  字符串 abcdefg 將范圍0..2的內(nèi)容移除后的結(jié)果為: defg
20:47:13.551  I  字符串 abcdefg 將范圍0..3的內(nèi)容替移除后的結(jié)果為: efg
20:47:13.551  I  字符串 abcdefg 刪除前綴 ab: cdefg
20:47:13.551  I  字符串 abcdefg 刪除前綴 ac: abcdefg
20:47:13.551  I  字符串 abcdefg 刪除后綴 fg: abcde
20:47:13.551  I  字符串 abcdefg 刪除前綴 fc: abcdefg
20:47:13.551  I  字符串 abcdefg 刪除前綴ab與后綴 fg: cde
20:47:13.551  I  字符串 abcdefgab 刪除前綴ab與后綴 ab: cdefg
20:47:13.552  I  字符串 abcdefg 刪除前綴ab與后綴 ab: abcdefg
20:47:13.552  I  字符串 abcdef 中第一個(gè)b前的內(nèi)容替換為 FG : FGbcdef
20:47:13.552  I  字符串 abcdef 中第一個(gè)W前的內(nèi)容替換為 FG : abcdef
20:47:13.552  I  字符串 abcdef 中第一個(gè)W前的內(nèi)容替換為 FG : H
20:47:13.552  I  字符串 abcdef 中第一個(gè)b后的內(nèi)容替換為 FG : abFG
20:47:13.552  I  字符串 abcdef 中第一個(gè)W后的內(nèi)容替換為 FG : abcdef
20:47:13.552  I  字符串 abcdef 中第一個(gè)W后的內(nèi)容替換為 FG : H
20:47:13.552  I  字符串 abcdef 中第一個(gè)bc前的內(nèi)容替換為 KO : KObcdef
20:47:13.552  I  字符串 abcdef 中第一個(gè)gc前的內(nèi)容替換為 KO : abcdef
20:47:13.552  I  字符串 abcdef 中第一個(gè)gc前的內(nèi)容替換為 KO : RF
20:47:13.552  I  字符串 abcdef 中第一個(gè)bc后的內(nèi)容替換為 KO : abcKO
20:47:13.552  I  字符串 abcdef 中第一個(gè)gc后的內(nèi)容替換為 KO : abcdef
20:47:13.552  I  字符串 abcdef 中第一個(gè)gc后的內(nèi)容替換為 KO : RF
20:47:13.552  I  字符串 abcdefdkp 中最后一個(gè)d前的內(nèi)容替換為 FG : FGdkp
20:47:13.552  I  字符串 abcdefdkp 中最后一個(gè)W前的內(nèi)容替換為 FG : abcdefdkp
20:47:13.552  I  字符串 abcdefdkp 中最后一個(gè)W前的內(nèi)容替換為 FG : H
20:47:13.553  I  字符串 abcdefdkp 中最后一個(gè)d后的內(nèi)容替換為 FG : abcdefdFG
20:47:13.553  I  字符串 abcdefdkp 中最后一個(gè)W后的內(nèi)容替換為 FG : abcdefdkp
20:47:13.553  I  字符串 abcdefdkp 中最后一個(gè)W后的內(nèi)容替換為 FG : H
20:47:13.553  I  字符串 abcdefbcAS 中最后一個(gè)bc前的內(nèi)容替換為 KO : KObcAS
20:47:13.553  I  字符串 abcdefbcAS 中最后一個(gè)gc前的內(nèi)容替換為 KO : abcdefbcAS
20:47:13.553  I  字符串 abcdefbcAS 中最后一個(gè)gc前的內(nèi)容替換為 KO : RF
20:47:13.553  I  字符串 abcdefbcAS 中最后一個(gè)bc后的內(nèi)容替換為 KO : abcdefbcKO
20:47:13.553  I  字符串 abcdefbcAS 中最后一個(gè)gc后的內(nèi)容替換為 KO : abcdefbcAS
20:47:13.553  I  字符串 abcdefbcAS 中最后一個(gè)gc后的內(nèi)容替換為 KO : RF
20:47:13.553  I  字符串 a8B9c7 中字母替換為 * : *8*9*7
20:47:13.553  I  字符串 a8B9a7 中字母"a"替換為"ps" : ps8B9ps7
20:47:13.554  I  字符串 a5a6a5 替換首個(gè)滿足 regex30 正則表達(dá)式的內(nèi)容為"A" : Aa6a5
20:47:13.554  I  字符串 a6a6a5 替換首個(gè)滿足 regex30 正則表達(dá)式的內(nèi)容為"A" : a6a6A
20:47:13.554  I  返回字符串 abcd 和 Abgkp 的公共前綴(比對(duì)時(shí)不忽略大小寫): 
20:47:13.554  I  返回字符串 abcd 和 Abgkp 的公共前綴(比對(duì)時(shí)忽略大小寫[返回小寫前綴]): ab
20:47:13.554  I  返回字符串 abcdef 和 wgheF 的公共后綴(比對(duì)時(shí)不忽略大小寫): 
20:47:13.554  I  返回字符串 abcdef 和 wgheF 的公共后綴(比對(duì)時(shí)忽略大小寫[返回小寫后綴]): ef
20:47:13.554  I  sequence330: 你好
20:47:13.554  I  sequence330: 我是
20:47:13.554  I  sequence330: 小學(xué)生
20:47:13.554  I  sequence331: 你好
20:47:13.554  I  sequence331: 我是|小學(xué)生
20:47:13.555  I  sequence341: 你好,我是
20:47:13.555  I  sequence341: 年級(jí)學(xué)生,你是
20:47:13.555  I  sequence341: 年級(jí)學(xué)生嗎?你
20:47:13.555  I  sequence341: 歲了嗎?
20:47:13.555  I  str35: 我是中國人,我愛中國。
                 我來自家鄉(xiāng)小鎮(zhèn),我也愛著
                 我的家鄉(xiāng)。
20:47:13.555  I  sequence350: 我是中國人,我愛中國。
20:47:13.555  I  sequence350: 我來自家
20:47:13.555  I  sequence350: 鄉(xiāng)小鎮(zhèn),我也愛著
20:47:13.555  I  sequence350: 我的家鄉(xiāng)。
20:47:13.555  I  str36: 我是中國人,我愛中國。我來自家鄉(xiāng)小鎮(zhèn),我也愛著我的家鄉(xiāng)。
20:47:13.555  I  str37: abc    length=3
20:47:13.555  I  str37: abc   removeAllStringNull length=3
20:47:13.556  I  sequence370: a
20:47:13.556  I  sequence370: b
20:47:13.556  I  sequence370: c

由于String的豐富操作,我們可以結(jié)合Gson/Json等將對(duì)象數(shù)據(jù)以字符串的形式存儲(chǔ),實(shí)現(xiàn)非數(shù)據(jù)形式的輕量存儲(chǔ)方式。

四. StringUtil 源碼

下面給出StringUtil源碼:

還有 35% 的精彩內(nèi)容
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
支付 ¥4.00 繼續(xù)閱讀

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容