前言
上节我们讲了函数接口Predicate
的使用,大家感兴趣的话可参看以下文章:
[1]Kotlin中的算数运算
[2]二元运算符 ?:
[3]Any的使用 - 简书
[4]数组
[5]Predicate的使用
今天让我们来学习一下字符串String
的相关知识,涉及内容有:
1.String
与CharSequence
2.String
的那些常用方法
3.封装类StringUtil
的使用
4.StringUtil
源码
一. String 与 CharSequence
在平常的开发中,我们经常会看到类似以下的代码:
@Override
public CharSequence getTileLabel() {
return null;
}
CharSequence
是个啥不清楚,但是我们知道只要是CharSequence
,我们就可以用String
去代替或者返回。那么CharSequence
和String
到底是啥关系呢。翻看CharSequence
代码可以发现:
public interface CharSequence {
public val length: Int
public operator fun get(index: Int): Char
public fun subSequence(startIndex: Int, endIndex: Int): CharSequence
}
CharSequence
是一个接口
,它包含了一个length
属性,还有两个方法:get(index: Int)
和subSequence(startIndex: Int, endIndex: Int)
这两个方法和一个属性,我们都似曾相识,好像在String
时用过。那么接下来看看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
}
可以发现String
继承于接口CharSequence
,是CharSequence
的实现类。
二. String 的那些常用方法
在日常开发中,String
使用很频繁。当然,它也有很多方法,包括我们常用的equals()
,toString()
,subSequence(...)
等。考虑到String
的操作方法众多,我这边就封装了一个StringUtil
工具类,便于对字符串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 转大写: ${StringUtil.uppercase(str1)}")
var str2 = "AbCDE"
LogUtil.i("字符串 $str2 转小写: ${StringUtil.lowercase(str2)}")
var str3 = "abc"
LogUtil.i("字符串 $str3 首字母转大写: ${StringUtil.capitalize(str3)}")
var str4 = "AEC"
LogUtil.i("字符串 $str4 首字母转小写: ${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}位数: ${StringUtil.padStart(str12,str12Length,'0')}")
LogUtil.i("字符串 $str12 用0在开头填充为2位数: ${StringUtil.padStart(str12,2,'0')}")
var str13 = "568"
var str13Length = 6
LogUtil.i("字符串 $str13 用a在结尾填充为${str13Length}位数: ${StringUtil.padEnd(str13,str13Length,'a')}")
LogUtil.i("字符串 $str13 用a在结尾填充为1位数: ${StringUtil.padEnd(str13,1,'a')}")
var str14 = "pojdadkfday"
LogUtil.i("字符串 $str14 截取第一个'd'之前的所有字符: ${StringUtil.substringBefore(str14,'d')}")
LogUtil.i("字符串 $str14 截取第一个'g'之前的所有字符: ${StringUtil.substringBefore(str14,'g')}")
LogUtil.i("字符串 $str14 截取第一个字符串\"da\"之前的所有字符: ${StringUtil.substringBefore(str14,"da")}")
LogUtil.i("字符串 $str14 截取第一个字符串\"F\"之前的所有字符: ${StringUtil.substringBefore(str14,"F")}")
LogUtil.i("字符串 $str14 截取第一个'd'之后的所有字符: ${StringUtil.substringAfter(str14,'d')}")
LogUtil.i("字符串 $str14 截取第一个'g'之后的所有字符: ${StringUtil.substringAfter(str14,'g')}")
LogUtil.i("字符串 $str14 截取第一个字符串\"da\"之后的所有字符: ${StringUtil.substringAfter(str14,"da")}")
LogUtil.i("字符串 $str14 截取第一个字符串\"F\"之后的所有字符: ${StringUtil.substringAfter(str14,"F")}")
LogUtil.i("字符串 $str14 截取最后一个'd'之前的所有字符: ${StringUtil.substringBeforeLast(str14,'d')}")
LogUtil.i("字符串 $str14 截取最后一个'g'之前的所有字符: ${StringUtil.substringBeforeLast(str14,'g')}")
LogUtil.i("字符串 $str14 截取最后一个字符串\"da\"之前的所有字符: ${StringUtil.substringBeforeLast(str14,"da")}")
LogUtil.i("字符串 $str14 截取最后一个字符串\"F\"之前的所有字符: ${StringUtil.substringBeforeLast(str14,"F")}")
LogUtil.i("字符串 $str14 截取最后一个'd'之后的所有字符: ${StringUtil.substringAfterLast(str14,'d')}")
LogUtil.i("字符串 $str14 截取最后一个'g'之后的所有字符: ${StringUtil.substringAfterLast(str14,'g')}")
LogUtil.i("字符串 $str14 截取最后一个字符串\"da\"之后的所有字符: ${StringUtil.substringAfterLast(str14,"da")}")
LogUtil.i("字符串 $str14 截取最后一个字符串\"F\"之后的所有字符: ${StringUtil.substringAfterLast(str14,"F")}")
LogUtil.i("字符串 $str14 截取最后一个字符串\"F\"之后的所有字符,未找到\"F\"则返回\"G\": ${StringUtil.substringAfterLast(str14,"F","G")}")
var str15 = "abcdefg"
var startIndex = 0
var endIndex = 4
var replacement1 = "xyz"
LogUtil.i("字符串 $str15 将下标${startIndex}-${endIndex}位置的内容替换为$replacement1 后的结果为: ${StringUtil.replaceRange(str15,startIndex,endIndex,replacement1)}")
var replacement2 = ""
LogUtil.i("字符串 $str15 将下标${startIndex}-${endIndex}位置的内容替换为$replacement2 后的结果为: ${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}的内容替换为$replacement160 后的结果为: ${StringUtil.replaceRange(str16,range1,replacement160)}")
LogUtil.i("字符串 $str16 将范围${range2}的内容替换为$replacement160 后的结果为: ${StringUtil.replaceRange(str16,range2,replacement160)}")
var str17 = "abcdefg"
var startIndex171 = 0
var endIndex171 = 3
LogUtil.i("字符串 $str17 将下标${startIndex171}-${endIndex171}位置的内容移除后的结果为: ${StringUtil.removeRange(str17,startIndex,endIndex)}")
var str18 = "abcdefg"
var range181: IntRange = 0 until 3
var range182: IntRange = 0..3
LogUtil.i("字符串 $str18 将范围${range181}的内容移除后的结果为: ${StringUtil.removeRange(str18,range181)}")
LogUtil.i("字符串 $str18 将范围${range182}的内容替移除后的结果为: ${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 中第一个${char240}前的内容替换为 $str240 : ${StringUtil.replaceBefore(str24,char240,str240)}")
LogUtil.i("字符串 $str24 中第一个${char241}前的内容替换为 $str240 : ${StringUtil.replaceBefore(str24,char241,str240,str24)}")
LogUtil.i("字符串 $str24 中第一个${char241}前的内容替换为 $str240 : ${StringUtil.replaceBefore(str24,char241,str240,"H")}")
LogUtil.i("字符串 $str24 中第一个${char240}后的内容替换为 $str240 : ${StringUtil.replaceAfter(str24,char240,str240)}")
LogUtil.i("字符串 $str24 中第一个${char241}后的内容替换为 $str240 : ${StringUtil.replaceAfter(str24,char241,str240,str24)}")
LogUtil.i("字符串 $str24 中第一个${char241}后的内容替换为 $str240 : ${StringUtil.replaceAfter(str24,char241,str240,"H")}")
var str25 = "abcdef"
var str250 = "KO"
var str251 = "bc"
var str252 = "gc"
LogUtil.i("字符串 $str25 中第一个${str251}前的内容替换为 $str250 : ${StringUtil.replaceBefore(str25,str251,str250)}")
LogUtil.i("字符串 $str25 中第一个${str252}前的内容替换为 $str250 : ${StringUtil.replaceBefore(str25,str252,str250,str24)}")
LogUtil.i("字符串 $str25 中第一个${str252}前的内容替换为 $str250 : ${StringUtil.replaceBefore(str25,str252,str250,"RF")}")
LogUtil.i("字符串 $str25 中第一个${str251}后的内容替换为 $str250 : ${StringUtil.replaceAfter(str25,str251,str250)}")
LogUtil.i("字符串 $str25 中第一个${str252}后的内容替换为 $str250 : ${StringUtil.replaceAfter(str25,str252,str250,str24)}")
LogUtil.i("字符串 $str25 中第一个${str252}后的内容替换为 $str250 : ${StringUtil.replaceAfter(str25,str252,str250,"RF")}")
var str26 = "abcdefdkp"
var str260 = "FG"
var char260 = 'd'
var char261 = 'W'
LogUtil.i("字符串 $str26 中最后一个${char260}前的内容替换为 $str260 : ${StringUtil.replaceBeforeLast(str26,char260,str260)}")
LogUtil.i("字符串 $str26 中最后一个${char261}前的内容替换为 $str260 : ${StringUtil.replaceBeforeLast(str26,char261,str260,str26)}")
LogUtil.i("字符串 $str26 中最后一个${char261}前的内容替换为 $str260 : ${StringUtil.replaceBeforeLast(str26,char261,str260,"H")}")
LogUtil.i("字符串 $str26 中最后一个${char260}后的内容替换为 $str260 : ${StringUtil.replaceAfterLast(str26,char260,str260)}")
LogUtil.i("字符串 $str26 中最后一个${char261}后的内容替换为 $str260 : ${StringUtil.replaceAfterLast(str26,char261,str260,str26)}")
LogUtil.i("字符串 $str26 中最后一个${char261}后的内容替换为 $str260 : ${StringUtil.replaceAfterLast(str26,char261,str260,"H")}")
var str27 = "abcdefbcAS"
var str270 = "KO"
var str271 = "bc"
var str272 = "gc"
LogUtil.i("字符串 $str27 中最后一个${str271}前的内容替换为 $str270 : ${StringUtil.replaceBeforeLast(str27,str271,str270)}")
LogUtil.i("字符串 $str27 中最后一个${str272}前的内容替换为 $str270 : ${StringUtil.replaceBeforeLast(str27,str272,str270,str27)}")
LogUtil.i("字符串 $str27 中最后一个${str272}前的内容替换为 $str270 : ${StringUtil.replaceBeforeLast(str27,str272,str270,"RF")}")
LogUtil.i("字符串 $str27 中最后一个${str271}后的内容替换为 $str270 : ${StringUtil.replaceAfterLast(str27,str271,str270)}")
LogUtil.i("字符串 $str27 中最后一个${str272}后的内容替换为 $str270 : ${StringUtil.replaceAfterLast(str27,str272,str270,str27)}")
LogUtil.i("字符串 $str27 中最后一个${str272}后的内容替换为 $str270 : ${StringUtil.replaceAfterLast(str27,str272,str270,"RF")}")
var str28 = "a8B9c7"
var regex28 = Regex("[a-zA-Z]+") //表示一个或多个字母
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 替换首个满足 regex30 正则表达式的内容为\"A\" : ${StringUtil.replaceFirst(str30, regex30, "A")}")
LogUtil.i("字符串 $str301 替换首个满足 regex30 正则表达式的内容为\"A\" : ${StringUtil.replaceFirst(str301, regex30, "A")}")
var str31="abcd"
var str310="Abgkp"
LogUtil.i("返回字符串 $str31 和 $str310 的公共前缀(比对时不忽略大小写): ${StringUtil.commonPrefixWith(str31,str310,false)}")
LogUtil.i("返回字符串 $str31 和 $str310 的公共前缀(比对时忽略大小写[返回小写前缀]): ${StringUtil.commonPrefixWith(str31,str310,true)}")
var str32="abcdef"
var str320="wgheF"
LogUtil.i("返回字符串 $str32 和 $str320 的公共后缀(比对时不忽略大小写): ${StringUtil.commonSuffixWith(str32,str320,false)}")
LogUtil.i("返回字符串 $str32 和 $str320 的公共后缀(比对时忽略大小写[返回小写后缀]): ${StringUtil.commonSuffixWith(str32,str320,true)}")
//splitToSequence 分割字符串
var str33="你好,我是|小学生"
//多字符分割
var sequence330 = str33.splitToSequence(",","|")
//单字符分割
var sequence331 = str33.splitToSequence(",")
sequence330.forEach { LogUtil.i("sequence330: $it") }
sequence331.forEach { LogUtil.i("sequence331: $it") }
//正则表达式匹配数字分割
var str34="你好,我是1年级学生,你是2年级学生吗?你9岁了吗?"
var regex340 = Regex("[0-9]") //正则表达式匹配数字分割
var sequence341 = StringUtil.splitToSequence(str34,regex340)
sequence341.forEach { LogUtil.i("sequence341: $it") }
//回车,换行分割
var str35 = "我是中国人,我爱中国。\n我来自家\r乡小镇,我也爱着\n我的家乡。"
LogUtil.i("str35: $str35")
var sequence350 = StringUtil.lineSequence(str35)
sequence350.forEach { LogUtil.i("sequence350: $it") }
var str36 = sequence350.joinToString("")
LogUtil.i("str36: $str36")
//字符串数组转字符串
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") }
}
}
运行结果如下:
19:54:09.377 I 字符串 abcdefgh123 转大写: ABCDEFGH123
19:54:09.377 I 字符串 AbCDE 转小写: abcde
19:54:09.377 I 字符串 abc 首字母转大写: Abc
19:54:09.377 I 字符串 AEC 首字母转小写: 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位数: 00568
19:54:09.392 I 字符串 568 用0在开头填充为2位数: 568
19:54:09.392 I 字符串 568 用a在结尾填充为6位数: 568aaa
19:54:09.392 I 字符串 568 用a在结尾填充为1位数: 568
19:54:09.392 I 字符串 pojdadkfday 截取第一个'd'之前的所有字符: poj
19:54:09.392 I 字符串 pojdadkfday 截取第一个'g'之前的所有字符: pojdadkfday
19:54:09.392 I 字符串 pojdadkfday 截取第一个字符串"da"之前的所有字符: poj
19:54:09.392 I 字符串 pojdadkfday 截取第一个字符串"F"之前的所有字符: pojdadkfday
19:54:09.392 I 字符串 pojdadkfday 截取第一个'd'之后的所有字符: adkfday
19:54:09.392 I 字符串 pojdadkfday 截取第一个'g'之后的所有字符: pojdadkfday
19:54:09.393 I 字符串 pojdadkfday 截取第一个字符串"da"之后的所有字符: dkfday
19:54:09.393 I 字符串 pojdadkfday 截取第一个字符串"F"之后的所有字符: pojdadkfday
19:54:09.393 I 字符串 pojdadkfday 截取最后一个'd'之前的所有字符: pojdadkf
19:54:09.393 I 字符串 pojdadkfday 截取最后一个'g'之前的所有字符: pojdadkfday
19:54:09.393 I 字符串 pojdadkfday 截取最后一个字符串"da"之前的所有字符: pojdadkf
19:54:09.393 I 字符串 pojdadkfday 截取最后一个字符串"F"之前的所有字符: pojdadkfday
19:54:09.393 I 字符串 pojdadkfday 截取最后一个'd'之后的所有字符: ay
19:54:09.393 I 字符串 pojdadkfday 截取最后一个'g'之后的所有字符: pojdadkfday
19:54:09.393 I 字符串 pojdadkfday 截取最后一个字符串"da"之后的所有字符: y
19:54:09.393 I 字符串 pojdadkfday 截取最后一个字符串"F"之后的所有字符: pojdadkfday
19:54:09.393 I 字符串 pojdadkfday 截取最后一个字符串"F"之后的所有字符,未找到"F"则返回"G": G
19:54:09.393 I 字符串 abcdefg 将下标0-4位置的内容替换为xyz 后的结果为: xyzefg
19:54:09.393 I 字符串 abcdefg 将下标0-4位置的内容替换为 后的结果为: efg
19:54:09.393 I 字符串 abcdefg 将范围0..2的内容替换为Uv 后的结果为: Uvdefg
19:54:09.393 I 字符串 abcdefg 将范围0..3的内容替换为Uv 后的结果为: Uvefg
19:54:09.394 I 字符串 abcdefg 将下标0-3位置的内容移除后的结果为: efg
19:54:09.394 I 字符串 abcdefg 将范围0..2的内容移除后的结果为: defg
19:54:09.394 I 字符串 abcdefg 将范围0..3的内容替移除后的结果为: 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 中第一个b前的内容替换为 FG : FGbcdef
19:54:09.394 I 字符串 abcdef 中第一个W前的内容替换为 FG : abcdef
19:54:09.394 I 字符串 abcdef 中第一个W前的内容替换为 FG : H
19:54:09.395 I 字符串 abcdef 中第一个b后的内容替换为 FG : abFG
19:54:09.395 I 字符串 abcdef 中第一个W后的内容替换为 FG : abcdef
19:54:09.395 I 字符串 abcdef 中第一个W后的内容替换为 FG : H
19:54:09.395 I 字符串 abcdef 中第一个bc前的内容替换为 KO : KObcdef
19:54:09.395 I 字符串 abcdef 中第一个gc前的内容替换为 KO : abcdef
19:54:09.395 I 字符串 abcdef 中第一个gc前的内容替换为 KO : RF
19:54:09.395 I 字符串 abcdef 中第一个bc后的内容替换为 KO : abcKO
19:54:09.395 I 字符串 abcdef 中第一个gc后的内容替换为 KO : abcdef
19:54:09.395 I 字符串 abcdef 中第一个gc后的内容替换为 KO : RF
19:54:09.395 I 字符串 abcdefdkp 中最后一个d前的内容替换为 FG : FGdkp
19:54:09.395 I 字符串 abcdefdkp 中最后一个W前的内容替换为 FG : abcdefdkp
19:54:09.395 I 字符串 abcdefdkp 中最后一个W前的内容替换为 FG : H
19:54:09.395 I 字符串 abcdefdkp 中最后一个d后的内容替换为 FG : abcdefdFG
19:54:09.395 I 字符串 abcdefdkp 中最后一个W后的内容替换为 FG : abcdefdkp
19:54:09.395 I 字符串 abcdefdkp 中最后一个W后的内容替换为 FG : H
19:54:09.395 I 字符串 abcdefbcAS 中最后一个bc前的内容替换为 KO : KObcAS
19:54:09.395 I 字符串 abcdefbcAS 中最后一个gc前的内容替换为 KO : abcdefbcAS
19:54:09.396 I 字符串 abcdefbcAS 中最后一个gc前的内容替换为 KO : RF
19:54:09.396 I 字符串 abcdefbcAS 中最后一个bc后的内容替换为 KO : abcdefbcKO
19:54:09.396 I 字符串 abcdefbcAS 中最后一个gc后的内容替换为 KO : abcdefbcAS
19:54:09.396 I 字符串 abcdefbcAS 中最后一个gc后的内容替换为 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 替换首个满足 regex30 正则表达式的内容为"A" : Aa6a5
19:54:09.397 I 字符串 a6a6a5 替换首个满足 regex30 正则表达式的内容为"A" : a6a6A
19:54:09.398 I 返回字符串 abcd 和 Abgkp 的公共前缀(比对时不忽略大小写):
19:54:09.398 I 返回字符串 abcd 和 Abgkp 的公共前缀(比对时忽略大小写[返回小写前缀]): ab
19:54:09.398 I 返回字符串 abcdef 和 wgheF 的公共后缀(比对时不忽略大小写):
19:54:09.398 I 返回字符串 abcdef 和 wgheF 的公共后缀(比对时忽略大小写[返回小写后缀]): ef
19:54:09.400 I sequence330: 你好
19:54:09.401 I sequence330: 我是
19:54:09.401 I sequence330: 小学生
19:54:09.403 I sequence331: 你好
19:54:09.403 I sequence331: 我是|小学生
19:54:09.404 I sequence341: 你好,我是
19:54:09.404 I sequence341: 年级学生,你是
19:54:09.404 I sequence341: 年级学生吗?你
19:54:09.404 I sequence341: 岁了吗?
19:54:09.405 I str35: 我是中国人,我爱中国。
我来自家乡小镇,我也爱着
我的家乡。
19:54:09.405 I sequence350: 我是中国人,我爱中国。
19:54:09.405 I sequence350: 我来自家
19:54:09.405 I sequence350: 乡小镇,我也爱着
19:54:09.405 I sequence350: 我的家乡。
19:54:09.405 I str36: 我是中国人,我爱中国。我来自家乡小镇,我也爱着我的家乡。
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 转大写: ABCDEFGH123
20:47:13.548 I 字符串 AbCDE 转小写: abcde
20:47:13.548 I 字符串 abc 首字母转大写: Abc
20:47:13.548 I 字符串 AEC 首字母转小写: 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位数: 00568
20:47:13.549 I 字符串 568 用0在开头填充为2位数: 568
20:47:13.549 I 字符串 568 用a在结尾填充为6位数: 568aaa
20:47:13.549 I 字符串 568 用a在结尾填充为1位数: 568
20:47:13.549 I 字符串 pojdadkfday 截取第一个'd'之前的所有字符: poj
20:47:13.550 I 字符串 pojdadkfday 截取第一个'g'之前的所有字符: pojdadkfday
20:47:13.550 I 字符串 pojdadkfday 截取第一个字符串"da"之前的所有字符: poj
20:47:13.550 I 字符串 pojdadkfday 截取第一个字符串"F"之前的所有字符: pojdadkfday
20:47:13.550 I 字符串 pojdadkfday 截取第一个'd'之后的所有字符: adkfday
20:47:13.550 I 字符串 pojdadkfday 截取第一个'g'之后的所有字符: pojdadkfday
20:47:13.550 I 字符串 pojdadkfday 截取第一个字符串"da"之后的所有字符: dkfday
20:47:13.550 I 字符串 pojdadkfday 截取第一个字符串"F"之后的所有字符: pojdadkfday
20:47:13.550 I 字符串 pojdadkfday 截取最后一个'd'之前的所有字符: pojdadkf
20:47:13.550 I 字符串 pojdadkfday 截取最后一个'g'之前的所有字符: pojdadkfday
20:47:13.550 I 字符串 pojdadkfday 截取最后一个字符串"da"之前的所有字符: pojdadkf
20:47:13.550 I 字符串 pojdadkfday 截取最后一个字符串"F"之前的所有字符: pojdadkfday
20:47:13.550 I 字符串 pojdadkfday 截取最后一个'd'之后的所有字符: ay
20:47:13.550 I 字符串 pojdadkfday 截取最后一个'g'之后的所有字符: pojdadkfday
20:47:13.550 I 字符串 pojdadkfday 截取最后一个字符串"da"之后的所有字符: y
20:47:13.551 I 字符串 pojdadkfday 截取最后一个字符串"F"之后的所有字符: pojdadkfday
20:47:13.551 I 字符串 pojdadkfday 截取最后一个字符串"F"之后的所有字符,未找到"F"则返回"G": G
20:47:13.551 I 字符串 abcdefg 将下标0-4位置的内容替换为xyz 后的结果为: xyzefg
20:47:13.551 I 字符串 abcdefg 将下标0-4位置的内容替换为 后的结果为: efg
20:47:13.551 I 字符串 abcdefg 将范围0..2的内容替换为Uv 后的结果为: Uvdefg
20:47:13.551 I 字符串 abcdefg 将范围0..3的内容替换为Uv 后的结果为: Uvefg
20:47:13.551 I 字符串 abcdefg 将下标0-3位置的内容移除后的结果为: efg
20:47:13.551 I 字符串 abcdefg 将范围0..2的内容移除后的结果为: defg
20:47:13.551 I 字符串 abcdefg 将范围0..3的内容替移除后的结果为: 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 中第一个b前的内容替换为 FG : FGbcdef
20:47:13.552 I 字符串 abcdef 中第一个W前的内容替换为 FG : abcdef
20:47:13.552 I 字符串 abcdef 中第一个W前的内容替换为 FG : H
20:47:13.552 I 字符串 abcdef 中第一个b后的内容替换为 FG : abFG
20:47:13.552 I 字符串 abcdef 中第一个W后的内容替换为 FG : abcdef
20:47:13.552 I 字符串 abcdef 中第一个W后的内容替换为 FG : H
20:47:13.552 I 字符串 abcdef 中第一个bc前的内容替换为 KO : KObcdef
20:47:13.552 I 字符串 abcdef 中第一个gc前的内容替换为 KO : abcdef
20:47:13.552 I 字符串 abcdef 中第一个gc前的内容替换为 KO : RF
20:47:13.552 I 字符串 abcdef 中第一个bc后的内容替换为 KO : abcKO
20:47:13.552 I 字符串 abcdef 中第一个gc后的内容替换为 KO : abcdef
20:47:13.552 I 字符串 abcdef 中第一个gc后的内容替换为 KO : RF
20:47:13.552 I 字符串 abcdefdkp 中最后一个d前的内容替换为 FG : FGdkp
20:47:13.552 I 字符串 abcdefdkp 中最后一个W前的内容替换为 FG : abcdefdkp
20:47:13.552 I 字符串 abcdefdkp 中最后一个W前的内容替换为 FG : H
20:47:13.553 I 字符串 abcdefdkp 中最后一个d后的内容替换为 FG : abcdefdFG
20:47:13.553 I 字符串 abcdefdkp 中最后一个W后的内容替换为 FG : abcdefdkp
20:47:13.553 I 字符串 abcdefdkp 中最后一个W后的内容替换为 FG : H
20:47:13.553 I 字符串 abcdefbcAS 中最后一个bc前的内容替换为 KO : KObcAS
20:47:13.553 I 字符串 abcdefbcAS 中最后一个gc前的内容替换为 KO : abcdefbcAS
20:47:13.553 I 字符串 abcdefbcAS 中最后一个gc前的内容替换为 KO : RF
20:47:13.553 I 字符串 abcdefbcAS 中最后一个bc后的内容替换为 KO : abcdefbcKO
20:47:13.553 I 字符串 abcdefbcAS 中最后一个gc后的内容替换为 KO : abcdefbcAS
20:47:13.553 I 字符串 abcdefbcAS 中最后一个gc后的内容替换为 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 替换首个满足 regex30 正则表达式的内容为"A" : Aa6a5
20:47:13.554 I 字符串 a6a6a5 替换首个满足 regex30 正则表达式的内容为"A" : a6a6A
20:47:13.554 I 返回字符串 abcd 和 Abgkp 的公共前缀(比对时不忽略大小写):
20:47:13.554 I 返回字符串 abcd 和 Abgkp 的公共前缀(比对时忽略大小写[返回小写前缀]): ab
20:47:13.554 I 返回字符串 abcdef 和 wgheF 的公共后缀(比对时不忽略大小写):
20:47:13.554 I 返回字符串 abcdef 和 wgheF 的公共后缀(比对时忽略大小写[返回小写后缀]): ef
20:47:13.554 I sequence330: 你好
20:47:13.554 I sequence330: 我是
20:47:13.554 I sequence330: 小学生
20:47:13.554 I sequence331: 你好
20:47:13.554 I sequence331: 我是|小学生
20:47:13.555 I sequence341: 你好,我是
20:47:13.555 I sequence341: 年级学生,你是
20:47:13.555 I sequence341: 年级学生吗?你
20:47:13.555 I sequence341: 岁了吗?
20:47:13.555 I str35: 我是中国人,我爱中国。
我来自家乡小镇,我也爱着
我的家乡。
20:47:13.555 I sequence350: 我是中国人,我爱中国。
20:47:13.555 I sequence350: 我来自家
20:47:13.555 I sequence350: 乡小镇,我也爱着
20:47:13.555 I sequence350: 我的家乡。
20:47:13.555 I str36: 我是中国人,我爱中国。我来自家乡小镇,我也爱着我的家乡。
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
的丰富操作,我们可以结合Gson/Json
等将对象数据以字符串的形式存储,实现非数据形式的轻量存储方式。
四. StringUtil 源码
下面给出StringUtil
源码: