前言
上節(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.String與CharSequence
2.String的那些常用方法
3.封裝類StringUtil的使用
4.StringUtil源碼
一. String 與 CharSequence
在平常的開發(fā)中,我們經(jīng)常會(huì)看到類似以下的代碼:
@Override
public CharSequence getTileLabel() {
return null;
}
CharSequence是個(gè)啥不清楚,但是我們知道只要是CharSequence,我們就可以用String去代替或者返回。那么CharSequence和String到底是啥關(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 的使用
下面給出StringUtil在TestActivity中的使用代碼:
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源碼: