Kotlin:字符串(String,你值得拥有

注意:

  • 使用subString(startIndex,endIndex)subString(rang)时的区别。可以从上边的结果结合源码可以看出来。
  • 切记下标越界的情况。即StringIndexOutOfBoundsException异常

2.2、用subSequence()函数截取

Kotlin中除了使用上面讲解到的使用subString()截取字符串外,还可以使用subSequence()函数截取。

我们看一看其源码实现:

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

public fun CharSequence.subSequence(range: IntRange): CharSequence = subSequence(range.start, range.endInclusive + 1)

从源码中我们可以看出,其大致和subString()函数一样,但是其不提供只传递startIndex的情况

实例:

val str = “Kotlin is a very good programming language”

println(str.subSequence(0,15))
println(str.subSequence(IntRange(0,15)))

输出结果为:

Kotlin is a ver
Kotlin is a very

三、字符串替换

同上述字符串截取一样,如果您有编程经验,可跳过此节。不过对于字符串替换功能,Kotlin除了实现Java中的replace()ha函数外,还提供了另外的replaceFirst()replaceAfter()replaceBefore()replaceIndent()、等函数。下面会对这些函数意义进行实例讲解。

3.1、replace()函数

replace()函数提供了4个重载函数。他们能实现不同的功能

3.1.1、 replace(oldChar,newChar,ignoreCase = false)

作用 : 把原字符串中的某一个字符全部替换成新的字符。然后返回新的字符串

  • oldChar: 需要替换的字符
  • newChar: 新的字符
  • ignoreCase : 是否引用Java中的replace()函数。默认值为false,即用Javareplace()函数

例:

// 把字符a全部替换为A
val str = “Kotlin is a very good programming language”
println(str.replace(‘a’,‘A’))

输出结果为:

Kotlin is A very good progrAmming lAnguAge

3.1.2、 replace(oldValue,newValue,ignoreCase = false)

作用 : 把原字符串中的某一个字符全部替换成新的字符。然后返回新的字符串

  • oldValue: 需要替换的字符串
  • newValue: 新的字符串
  • ignoreCase : 是否引用Java中的replace()函数。默认值为false,即用Javareplace()函数

例:

// 把字符串Kotlin替换成字符串Java
val str = “Kotlin is a very good programming language”
println(str.replace(“Kotlin”,“Java”))

输出结果为:

Java is a very good programming language

3.1.3、 replace(regex,replacement)

作用 : 根据定义的正则规则去匹配源字符串,把满足规则的字符串替换成新的字符串。

  • regex: 正则表达式
  • replacement: 新的字符串

例:

// 正则的规则为检测数字,如果为数字则替换成字符串kotlin
val str = “1234a kotlin 5678 3 is 4”
println(str.replace(Regex(“[0-9]+”),“kotlin”))

输出结果为:

kotlina kotlin kotlin kotlin is kotlin

3.1.4、replace(regex: Regex, noinline transform: (MatchResult) -> CharSequence)

  • 作用 : 根据定义的正则规则去匹配源字符串,把满足规则的字符串通过transform{}高阶函数映射的新字符串替换。
  • regex: 正则表达式
  • transform: 高阶函数

例:

val str = “1234a kotlin 5678 3 is 4”
val newStr = str.replace(Regex(“[0-9]+”),{"abcd "})

输出结果为:

abcd abcd abcd abcd a kotlin abcd abcd abcd abcd  abcd  is abcd

可以从上述的两个函数中看到两个函数的区别。关于高阶函数正则表达式的知识点可以先自行看资料理解。小生会在后续的章节中补上相关的内容…

经过上面的replace()函数的讲解。并且对几个重载函数进行了分析。相信大家对replace()函数中的参数都有大致的了解。并且下面的几个函数也是大致相同的操作。故而下面的几个函数操作,我只会举例说明其作用。关于参数的介绍就不作细究了

3.2、replaceFirst()

作用:把满足条件的第一个字符或字符串替换成新的字符或字符串

例:

val str = “Kotlin is a very good programming language”
println(str.replaceFirst(‘a’,‘A’))
println(str.replaceFirst( “Kotlin”,“Java”))

输出结果为:

Kotlin is A very good programming language
Java is a very good programming language

3.3、replaceBefore()

作用:截取满足条件的第一个字符或字符串后面的字符串,包含满足条件字符或字符串自身,并在其前面加上新的字符串。

例:

val str = “Kotlin is a very good programming language”
println(str.replaceBefore(‘a’,“AA”))
println(str.replaceBefore(“Kotlin”,“Java”))

输出结果为:

AAa very good programming language
JavaKotlin is a very good programming language

3.4、replaceBeforeLast()

作用:截取满足条件的最后一个字符或字符串后面的字符串,包含满足条件字符或字符串自身,并在其前面加上新的字符串。

例:

val str = “Kotlin is a very good programming language”
println(str.replaceBeforeLast(‘a’,“AA”))
println(str.replaceBeforeLast(“Kotlin”,“Java”))

输出结果为:

AAage
JavaKotlin is a very good programming language

3.5、replaceAfter()

作用:截取满足条件的第一个字符或字符串前面的字符串,包含满足条件字符或字符串自身,并在其后面加上新的字符串。

例:

val str = “Kotlin is a very good programming language”
println(str.replaceAfter(‘a’,“AA”))
println(str.replaceAfter(“Kotlin”,“Java”))

输出结果为:

Kotlin is aAA
KotlinJava

3.6、replaceAfterLast()

作用:截取满足条件的最后一个字符或字符串前面的字符串,包含满足条件字符或字符串自身,并在其后面加上新的字符串。

例:

val str = “Kotlin is a very good programming language”
println(str.replaceAfterLast(‘a’,“AA”))
println(str.replaceAfterLast(“Kotlin”,“Java”))

输出结果为:

Kotlin is a very good programming languaAA
KotlinJava

四、字符串分割

同上一节一样,Kotlin除了实现Java中的split()函数之外,还提供了splitToSequence()函数来分割字符串。分割成功后都会返回一个字符串集合用于我们后续操作。

4.1、 split()

split()函数也是提供了4个重载函数。其中,用正则表达式为条件分割占用两个。用字符分割占用一个。用字符串分割占用一个。

4.1.1、使用正则表达式分割

Kotlin中使用正则表达式,使用的是Regex类,而Java中使用正则表达式使用的Pattern类。这里分别举例说明

例:

var str2 = “1 kotlin 2 java 3 Lua 4 JavaScript”

val list3 = str2.split(Regex(“[0-9]+”))
for (str in list3){
print(“$str \t”)
}

println()

val list4 = str2.split(Pattern.compile(“[0-9]+”))
for (str in list4){
print(“$str \t”)
}

输出结果为:

kotlin  java  Lua  JavaScript     
kotlin  java  Lua  JavaScript

4.1.2、使用字符或字符串分割

在实际的项目开发中,还是这种方式用的要多一些。不过这里值得注意的是,不管是用字符分割,还是字符串分割,其都是一个可变参数。即其参数的个数不定。

例:

val str1 = “Kotlin is a very good programming language”

val list1 = str1.split(’ ')
for (str in list1){
print(“$str \t”)
}

println()

val list2 = str1.split(" “)
for (str in list2){
print(”$str \t")
}

输出结果为:

Kotlin   is   a   very     good    programming     language
Kotlin   is   a   very     good    programming     language

这里举例一个可变参数情况的例子:

val str3 = “a b c d e f g h 2+3+4+5”
val list5 = str3.split(’ ‘,’+')
for (str in list5){
print(“$str \t”)
}

输出结果为:

a     b   c   d   e   f   g   h   2   3   4   5

4.2、 splitToSequence()

此函数同样可以用字符串或字符去分割,其用法和上述的split()函数一样。这里就不多累述了…

五、其他

除了上面讲解到的几点外,还有很多常用的处理,比如检测字符串是否为空串,是否为null,获取字符串长度,字符串反转,统计,转换字符数组,获取指定下标的字符等等。

5.1、 获取字符串长度

Kotlin中用两种获取字符串长度的方法。其实也是一种而已

  1. 直接用length属性获取长度
  2. count()函数获取,其实count()函数的做法也是返回了length长度。

实例:

val str = “kotlin very good”

// 1. 直接用length属性获取
println(“str.length => ${str.length}”)

// 2. 用count()函数获取
println(“str.count() => ${str.count()}”)

输出结果为:

str.length => 16
str.count() => 16

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

最后

我见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了5、6年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。

其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。

不断奔跑,你就知道学习的意义所在!

《Android高级架构师面试指导+2021大厂面试真题》免费领取

术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了5、6年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。

其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。

不断奔跑,你就知道学习的意义所在!

[外链图片转存中…(img-CxQx00T2-1710844628833)]

《Android高级架构师面试指导+2021大厂面试真题》免费领取

[外链图片转存中…(img-avWd5UQO-1710844628833)]

  • 17
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值