【Kotlin 初学者】字符串常用操作汇总(上)

简介: 一、字符串创建1.1 字符串属性1.2 字符串函数二、字符串截取三、字符串分割四、字符串替换

作者简介:CSDN博客专家、华为云享专家认证

系列专栏:Kotlin 初学者

学习交流:三人行必有我师焉;择其善者而从之,其不善者而改之。



一、字符串创建


       String类表示char类型的数组。字符串是不可变的,这意味着长度和元素在创建后不能更改。因为字符串对象是不可变的,所以可以共享它们。


1.fun main() {
    val ch = charArrayOf('S', 'h', 'u', 'a', 'i', 'C', 'i')
    val str = String(ch)
    println(str)//ShuaiCi
}


与Java不同,Kotlin需要使用new关键字来实例化String类的对象。 String可以简单地在双引号("")中声明,称为转义字符串或三引号(""" """),称为原始字符串


fun main() {
    val kotlin = "Kotlin"
    val android = """Android"""
    println("$kotlin-$android")//Kotlin-Android
}


1.1 字符串属性


属性 描述
length: Int 返回字符串序列的长度。
indices: IntRange 返回当前 char 序列中有效字符索引的范围。
lastIndex: Int 返回 char 序列中最后一个字符的索引。


1.2 字符串函数


函数 描述
compareTo(other: String): Int 将当前对象与指定对象进行比较以获得顺序。 如果current等于指定的其他对象,则返回0
get(index: Int): Char 返回当前字符序列中给定索引处的字符。
plus(other: Any?): String 返回连接字符串,其中包含给定其他字符串的字符串表示形式。
subSequence(startIndex: Int,endIndex: Int): CharSequence 从当前字符序列返回从startIndex开始到endIndex新的字符序列
CharSequence.contains(other: CharSequence, ignoreCase: Boolean = false):Boolean 如果字符序列包含指定的字符序列,则返回true
CharSequence.count(): Int 返回char序列的长度。
String.drop(n: Int): String 删除前n个字符后返回一个字符串。
String.dropLast(n: Int): String 删除最后一个n字符后返回一个字符串。
String.dropWhile(predicate: (Char) -> Boolean): String 返回一个包含所有字符的字符序列,但满足给定谓词的第一个字符除外。
CharSequence.elementAt(index: Int): Char 将返回给定索引处的字符,或如果索引在字符序列中不存在,则抛出IndexOutOfBoundsException
CharSequence.indexOf(char: Char, startIndex: Int = 0, ignoreCase: Boolean = false): Int 返回从给定的索引值开始给定字符第一次出现的索引。
CharSequence.indexOfFirst(predicate: (Char) -> Boolean): Int 返回与给定谓词匹配的第一个字符的索引,如果字符序列不包含任何此类字符,则返回-1
CharSequence.getOrElse(index: Int, defaultValue: (Int) ->Char): Char 如果索引超出当前字符序列的范围,它将返回指定索引处的字符或调用defaultValue函数的结果。
CharSequence.getOrNull(index: Int): Char? 它返回给定索引处的字符,如果索引超出字符序列的范围,则返回null


二、字符串截取


2.1 substring()函数


       substring函数支持IntRange类型(表示一个整数范围的类型)的参数,until创建的范围不包括上限值。


/**
 * 返回由给定的 [范围] 索引指定的子字符串。
 */
public fun String.substring(range: IntRange): 
//这里需要注意:range.endInclusive + 1
String = substring(range.start, range.endInclusive + 1)
/**
 *返回从 [startIndex] 开始到 [endIndex] 之前结束的此字符序列范围中的字符子字符串。
  *
  * @param startIndex 起始索引(含)。
  * @param endIndex 结束索引(独占)。 如果未指定,则使用字符序列的长度。
 */
@kotlin.internal.InlineOnly
public inline fun CharSequence.substring(startIndex: Int, endIndex: Int = length): String = subSequence(startIndex, endIndex).toString()
/**
 * 返回此字符序列的指定 [范围] 索引处的字符子字符串。
 */
public fun CharSequence.substring(range: IntRange): String = subSequence(range.start, range.endInclusive + 1).toString()


看到这里你会发现他们最后调用的还是String.subSequence()函数。这里咱们先看看substring。


    //字符串截取
    var intercept = "Write better Android apps faster with Kotlin."
    println(intercept.length)//45
    println(intercept.substring(10))//er Android apps faster with Kotlin.
    println(intercept.substring(10,18))//er Andro
    println(intercept.substring(10 until 18))//er Andro
    println(intercept.substring(IntRange(10,18)))//er Androi


使用subString(startIndex,endIndex)和subString(rang)时的区别。结合源码和实例可以看出。


下标越界


       如上面代码,intercept的字符串长度为45,咱们看下面代码:


    println(intercept.substring(30,46))
    println(intercept.substring(IntRange(30,46)))


微信图片_20220524221519.png


切记下标越界的情况。即StringIndexOutOfBoundsException异常


2.2 subSequence()函数


       从当前字符序列返回从startIndex开始到endIndex新的字符序列


1.    var intercept = "Write better Android apps faster with Kotlin."
    println(intercept.length)//45
    println(intercept.subSequence(10, 18))//er Andro


三、字符串分割


       split函数返回的是List集合数据,Lst集合又支持解构语法特性,它允许你在一个表达式里给多个变量赋值,解构常用来简化变量的赋值。


3.1 使用字符或字符串分割


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


    //字符串分割
    var cf = "Android|Java|Kotlin"
    var data = cf.split("|")
    println(data)    


 这个跟Java类似,只不过返回的是个List集合数据。


微信图片_20220524221708.png


解构语法


     var cf = "Android|Java|Kotlin"
    //解构语法
    var (zero, one, two) = cf.split("|")
    println("$zero-$one-$two")
    //解构语法过滤元素,通过_符号过滤掉不想要的元素
    //如,不想接收第二个元素则可以用 "_"
    var (zero2, _, two2) = cf.split("|")
    println("$zero2-$two2")


微信图片_20220524221741.png


3.2 使用正则表达式分割


       在Kotlin中使用正则表达式,使用的是Regex类,而Java中使用正则表达式使用的Pattern类。


1.    var dataRegex = cf.split(Regex("[ao]"))
    //[Andr, id|J, v, |K, tlin]
    println(dataRegex.toString())
    dataRegex = cf.split(Pattern.compile("[ao]"))
    //[Andr, id|J, v, |K, tlin]
    println(dataRegex.toString())


四、字符串替换


       Kotlin除了实现Java中的replace()函数外,还提供了另外的replaceFirst()、replaceAfter()、replaceBefore()、replaceIndent()等函数。


4.1 replace()函数


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


4.1.1 replace(oldValue: String, newValue: String, ignoreCase: Boolean = false)


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


  • oldChar: 需要替换的字符


  • newChar: 新的字符


  • ignoreCase : 是否引用Java中的replace()函数。默认值为false,即用Java的replace()函数


    var th = "Write better Android apps faster with Kotlin."
    // 把字符t全部替换为!
    println(th)
    println(th.replace("t", "!"))


微信图片_20220524221912.png


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


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


  • regex: 正则表达式,用来决定要替换哪些字符


  • transform: 高阶函数(匿名函数,用来确定该如何替换正则表达式搜索到的字符)


    var reg= th.replace(Regex("[rte]")){
        when(it.value){
            "r" ->"7"
            "t" ->"!"
            "e" ->"5"
            else -> it.value
        }
    }
    println(reg)


微信图片_20220524221957.png


其他两个函数就不占用篇幅了,用法是一样的。


4.2 replaceFirst()函数


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


    //把第一个字符A替换为V
    println(th.replaceFirst("e", "V"))
    //把第一个字符串er替换为Victory
    println(th.replaceFirst("er", "Victory"))


微信图片_20220524222040.png


4.3 replaceAfter()函数


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


    //截取字符p,并在其后面加上Kotlin
    println(th.replaceAfter("p", "Kotlin"))
    //截取字符串Android,并在其后面加上帅次
    println(th.replaceAfter("Android", "帅次"))


微信图片_20220524222114.png


4.4 replaceBefore()函数


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


    //截取字符p,并在其前面加上Kotlin
    println(th.replaceBefore("p", "Kotlin"))
    //截取字符串Android,并在其前面加上帅次
    println(th.replaceBefore("Android", "帅次"))


微信图片_20220524222152.png


4.5 replaceIndent()函数


       检测常见的最小缩进,并将其替换为指定的 newIndent。


1.    var indent  = "            aaa       aaaA"
    println(indent)
    //检测常见的最小缩进,并将其替换为指定的 newIndent。
    println(indent.replaceIndent())
    //检测所有输入行的通用最小缩进,将其从每一行中删除,如果第一行和最后一行是空白的,也将其删除(注意空白与空的区别)
    println(indent.trimIndent())


微信图片_20220524222232.png

相关文章
|
10天前
|
Kotlin 索引
Kotlin中的字符串基本操作
Kotlin中的字符串基本操作
15 3
|
10天前
|
存储 Kotlin
Kotlin中布尔类型、字符类型、字符串类型和数组类型
Kotlin中布尔类型、字符类型、字符串类型和数组类型
9 1
|
8月前
|
编译器 C++ Kotlin
【Kotlin】基础速览(1):操作符 | 内建类型 | 类型转换 | 字符串模板 | 可变 var 和不可变 val
【Kotlin】基础速览(1):操作符 | 内建类型 | 类型转换 | 字符串模板 | 可变 var 和不可变 val
43 0
|
2月前
|
存储 安全 Java
《Kotlin核心编程》笔记:val 和 var & 字符串
《Kotlin核心编程》笔记:val 和 var & 字符串
41 0
|
12月前
|
XML 前端开发 安全
kotlin使用spring mvc将接收的字符串生成二维码并响应
使用kotlin制作一个基于`spring mvc`的小demo:接收请求中的字符串参数,用`zxing`将字符串生成出一个二维码,再返回给前端。可以通过此例来了解kotlin与spring的搭配
220 1
|
Java Android开发 Kotlin
【Kotlin 初学者】字符串常用操作汇总(下)
五、字符串比较 六、字符串查找 七、字符串验证 八、大杂烩
372 0
【Kotlin 初学者】字符串常用操作汇总(下)
|
Java Android开发 图形学
Android修行手册之Kotlin-【变量和常量】、【基础类型】、【字符串】篇
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
195 0
|
Kotlin
kotlin高阶函数开发一个程序,统计文本中字符串出现的个数
一、高阶函数是Kotlin的核心部分,下面来使用下高阶函数写一个程序 注意:我这里的File使用的是:与src同级的文件,你可以根据自己的需要,修改文件地址 代码实例 package net.
1322 0
|
Java Kotlin 编译器
Kotlin学习(二)—— 基本语法,函数,变量,字符串模板,条件表达式,null,类型检测,for,while,when,区间,集合
一.基本语法 Kotlin的很多概念跟JAVA是有类似的,所以我应该不会像我的JAVA之旅一样那么的详细,但是不用担心,你会看的很明白的,我也是根据官方的文档来学习的 我们在IDEA中创建一个项目Kotlin02 1.
1604 0
|
1月前
|
安全 Java Android开发
使用Kotlin进行Android应用开发:高效、简洁与乐趣并存
【6月更文挑战第1天】Kotlin,JetBrains开发的静态类型语言,正日益成为Android开发首选。它与Java兼容,提供简洁、安全的语法,如空安全、扩展函数和Lambda表达式,提升开发效率和代码可读性。Kotlin在Android开发中的优势包括提高开发速度、降低学习曲线及强大的社区支持。实践中,数据类简化对象创建,扩展函数增强SDK,Lambda表达式简化回调处理,协程优化异步操作。掌握Kotlin对Android开发者极具价值。