kotin(三) 字符串函数

函数    描述
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创建的范围不包括上限值。

println("\n---------------   字符串截取类  subString()  IntRange截取类----------------")
var intercept = "Write better Android apps faster with Kotlin."
println(intercept.substring(10))//er Android apps faster with Kotlin.
println(intercept.substring(10,18))//er Andro
println(intercept.substring(IntRange(10,18)))//er Andro

三、字符串分割 

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

    println("\n---------------   字符串分割  spit---------------")
    var cf = "Android|Java|Kotlin"
    var data : List<String> =cf.split("|")
    println(data)


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

3.2 使用正则表达式分割

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

    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()、  把满足条件的第一个字符或字符串替换成新的字符或字符串。

var str="android"
var st1= str.replaceFirst("d","ll")//anllroid

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

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

    println("\n---------------   字符串替换--- replace-----------")
    var  replaceStr="android"
    var  replace1 = replaceStr.replace("i","wo",true)//androwod
    var replace2 =replaceStr.replaceFirst("d","")//anroid
    var replace3 = replaceStr.replaceAfter("d","NEW")//andNEW
    var replace4 = replaceStr.replaceBefore("d","NEW")//NEWdroid
    println(replace1+ "  "+replace2+"  "+replace3+"  "+replace4)

replaceIndent()等函数。

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

4.1 replace()函数

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

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

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

oldChar: 需要替换的字符

newChar: 新的字符

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

 

六、字符串查找
6.1 获取第一个元素

6.1.1 first()函数和first{}函数

    var seek = "Write better Android apps faster with Kotlin."
    println(seek.first())
    //查找等于某一个字符的第一个元素
    var data = seek.first {
        it == 'A'
    }
    println(data)


        在这里介绍一下firstOrNull()函数和firstOrNull{}函数:

如果字符串为空串时,first()函数会抛出异常,而firstOrNull()函数会返回null。

如果字符串为空串时,first{}函数会抛出异常,而firstOrNull{}函数会返回null

6.1.2 firstOrNull()函数和firstOrNull{}函数

    seek = ""
    //报错:NoSuchElementException: Char sequence is empty.
//    println(seek.first())
    println(seek.firstOrNull())//null
    //如果字符串为空串或字符串内没有该字符,则返回null
    var foN= seek.firstOrNull {
        it == 'N'
    }
    println(foN)//null
    seek = "Note"
    //满足条件返回:char=N
    foN= seek.firstOrNull {
        it == 'N'
    }
    println(foN)//N

6.2 获取最后一个元素

    seek = "Note"
    println(seek.last())//e
    var la = seek.last {
        it == 't'
    }
    println(la)//t
        lastOrNull()firstOrNull()类似。lastOrNull{}firstOrNull{}类似。

6.3 查找元素

indexOf() : 查找某一个元素或字符串在原字符串中第一次出现的下标。

indexOfFirst{}: 同indexOf()。

lastIndexOf(): 查找某一个元素或字符串在原字符串中最后一次出现的下标。

indexOfLast{}: 同lastIndexOf()。
 

    val cz = "Android|Java|Kotlin"
    //查找i在cz中第一次出现的下标。
    println(cz.indexOf('i'))//5
    println(cz.indexOf("i"))//5
    //从第10位开始,查找i在cz中第一次出现的下标。
    println(cz.indexOf("i", 10))//17
    var z = cz.indexOfFirst {
        it == 'i'
    }
    println(z)//5
 
    //查找i在cz中最后一次出现的下标。
    println(cz.lastIndexOf('i'))//17
    println(cz.lastIndexOf("i"))//17
    //从第10位开始,查找i在cz中第一次出现的下标。
    println(cz.lastIndexOf("i", 10))//5
    z = cz.indexOfLast {
        it == 'i'
    }
    println(z)//17

七、字符串验证
        在实际的开发中,特别是Android开发中,会经常遇到验证输入框的内容是否为空串的时候。

        下列几个函数都是处理字符串为空串或为空的:

isEmpty(): 其源码是判断其length是等于0,若等于0则返回true,反之返回false。不能直接用于可空的字符串

isNotEmpty(): 其源码是判断其length是否大于0,若大于0则返回true,反之返回false。不能直接用于可空的字符串

isNullOrEmpty(): 其源码是判断该字符串是否为null或者其length是否等于0。

isBlank(): 其源码是判断其length是否等于0,或者判断其包含的空格数是否等于当前的length。不能直接用于可空的字符串

isNotBlank(): 其源码是对isBlank()函数取反。不能直接用于可空的字符串

isNotOrBlank(): 其源码判断该字符串是否为null。或者调用isBlank()函数

    var verification = ""
    println(verification)
    println(verification.isEmpty())//true
    println(verification.isNotEmpty())//false
    println(verification.isNullOrEmpty())//true
    println(verification.isBlank())//true
    println(verification.isNotBlank())//false
    println(verification.isNullOrBlank())//true
 
    verification = "Kotlin"
    println(verification)
    println(verification.isEmpty())//false
    println(verification.isNotEmpty())//true
    println(verification.isNullOrEmpty())//false
    println(verification.isBlank())//false
    println(verification.isNotBlank())//true
    println(verification.isNullOrBlank())//false

八、其他
8.1 字符串拼接

使用+

使用plus()函数

    var name = "ShuaiCi "
    //字符串拼接
    println(name + "回笼早觉艺术家")//ShuaiCi 回笼早觉艺术家
    println(name.plus("无所谓最佳男主角"))//ShuaiCi 无所谓最佳男主角
    println(name.plus(12.5))//ShuaiCi 12.5


8.2 字符串长度获取

直接用length属性获取长度

用count()函数获取,其实count()函数的做法也是返回了length长度。

    var name = "ShuaiCi "
    //字符串长度
    println(name.length)//8
    println(name.count())//8


8.3 统计重复字符

count()函数,是返回了length属性获取字符串的长度。

count{}高阶函数,用于统计字符串中重复某个字符的个数。

    var name = "ShuaiCi "
    //在name中有2个i
    var coun = name.count {
        it == 'i'
    }
    println(coun)//2


8.4 字符串反转

        使用reversed()函数可以将字符串的元素反转。

    println(name)//ShuaiCi 
    println(name.reversed())// iCiauhS


8.5 判断字符串的起始与结尾

8.5.1 起始:startsWith()

        判断其字符串是否由某一个字符或字符串起始。

    var name = "ShuaiCi "
    println(name.startsWith('S'))//true
    println(name.startsWith("Shuai"))//true
    println(name.startsWith("Ci"))//false
    println(name.get(5))//C
    //当起始位置为5时,是否由字符串`Ci`起始
    println(name.startsWith("Ci", 5))//true


8.5.2 结尾:endsWith()

        判断其字符串是否由某一个字符或字符串结尾。

   

var name = "ShuaiCi "
    println(name.endsWith(' '))//true
    println(name.endsWith("Shuai"))//false
    println(name.endsWith("Ci "))//true


8.6 去空格

        使用trim()函数返回一个字符串,其值为该字符串,删除了任何前导和尾随空格。

    name = "     ShuaiCi     "
    println(name)//     ShuaiCi
    println(name.trim())//ShuaiCi
    var cun = name.trim {
        it == ' '
    }
    println(cun)//ShuaiCi

8.8 字符串遍历

    name = "Shuaici"

    name.forEach {

        print("$it|")

    }


 

和 Java 一样,String 是不可变的。方括号 [] 语法可以很方便的获取字符串中的某个字符,也可以通过 for 循环来遍历:

var strcc="schll"
for(chars in strcc){
println(chars)
}

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

Kotlin 支持三个引号 """ 扩起来的字符串,支持多行字符串

for (c in str) {
    println(c)
}
Kotlin 支持三个引号 """ 扩起来的字符串,支持多行字符串,比如:

fun main(args: Array<String>) {
    val text = """
    多行字符串
    多行字符串
    """
    println(text)   // 输出有一些前置空格
}

3 String 可以通过 trimMargin() 方法来删除多余的空白。

fun main(args: Array<String>) {
    val text = """
    |多行字符串
    |菜鸟教程
    |多行字符串
    |Runoob
    """.trimMargin()
    println(text)    // 前置空格删除了
}

默认 | 用作边界前缀,但你可以选择其他字符并作为参数传入,比如 trimMargin(">")。

 String 模板
模板支持在字符串的引号内放入变量值

字符串内嵌表达式。

$ 表示一个变量名或者变量值

$varName 表示变量值

${varName.fun()} 表示变量的方法返回值:


fun main() {
    val name: String = "Shuaici"
    val age: Int = 18
    val money: Float = 1.25f
    //引号内放入变量值
    println("$name 今年 $age ,身上带了 $money 巨款")
 
    val isMan: Boolean = true
    //添加表达式
    println("$name 是个 ${if (isMan) "纯爷们" else "萌妹子"}")
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值