美文网首页
Kotlin学习笔记(三)—— 字符和字符串

Kotlin学习笔记(三)—— 字符和字符串

作者: CoderCyl | 来源:发表于2019-12-05 21:46 被阅读0次

    字符串

    字符串判空
    val string = ""
    val string2 = " "
    
    >> println(string.isBlank())        // true
    >> println(string.isNotBlank())     // false
    >> println(string.isEmpty())        // true
    >> println(string.isNotEmpty())     // false
    
    >> println(string2.isBlank())       // true
    >> println(string2.isNotBlank())    // false
    >> println(string2.isEmpty())       // false
    >> println(string2.isNotEmpty())    // true
    
    true
    false
    true
    false
    true
    false
    false
    true
    

    isEmpty() 和 isNotEmpty() 是一对相反的方法,用来判断字符串是否是空字符串和是否不是空字符串。isBlank用来判断字符串是否是空格。由以上输出可见,空字符串"" 和 " "(有空格)的isBlank()的结果都是true,所以不带空格的字符串也算空格,但是不带空格的字符串的 isEmpty() 方法返回 true,而带空格的字符串的 isEmpty() 方法返回false,说明 空格字符串也算一个字符。

    字符串长度
    val string = "Kotlin"
    
    >> println(string.length)
    >> println(string.count())
    6
    6
    

    length 和 count() 都可以得到字符串的长度,length是属性,而count()是方法。

    看源码可知,count()方法返回的也是属性length的值:

    /**
     * Returns the length of this char sequence.
     */
    @kotlin.internal.InlineOnly
    public inline fun CharSequence.count(): Int {
        return length
    }
    
    获取指定位置的字符
    val string = "Kotlin"
    
    >> println(string[2])           ①
    >> println(string.elementAt(2)) ②
    >> println(string.get(2))       ③
    t
    t
    t
    

    三种方式都可以获取到指定位置的值,推荐使用方法①、

    获取第一个值和最后一个值[first()/last()]
    val string = "Kotlin"
    
    >> println(string.first())
    >> println(string.last())
    K
    n
    
    截取子串 substring
    val string = "Kotlin is very nice"
    
    >> println(string.substring(3)) // 截取索引3到最后的子串
    lin is very nice
    
    >> println(string.substring(3, 10)) // 截取索引3到10的子串
    lin is
    
    索引 indexOf

    获取某个字符/字符串的索引

    val string = "Kotlin K"
    
    // 获取小写字母k在字符串中的索引,因为字符串中不存在小写k,所以返回-1
    >> println(string.indexOf("k"))
    -1
    
    // 不过indexOf函数有一个参数是ignoreCase忽略大小写,返回第一个符合要求的索引
    >> println(string.indexOf("k", ignoreCase = true))
    0
    
    // 从索引2开始算,所以第一个K直接跳过
    >> println(string.indexOf("K", startIndex = 2))
    7 
    
    // 数组中任意一个元素第一次匹配到的元素索引
    >> println(string.indexOfAny(listOf("t", "K", "1")))
    0 
    
    // 最后一个元素的索引
    >> println(string.lastIndex)
    7 
    
    // 匹配满足条件的第一个元素索引,如:第一个小写字母的索引
    println(string.indexOfFirst { it.isLowerCase() })
    
    
    // 匹配满足条件的最后一个元素索引,如:最后一个小写字母的索引
    >> println(string.indexOfLast { it.isLowerCase() })
    5
    
    索引范围 indices

    获取第一个元素到最后一个元素的范围

    val string = "I'm learning Kotlin"
    >> println(string.indices)
    0..18
    
    判断字符串是否相等 ==/contentEquals()
    val s1 = "kotlin"
    val s2 = "Kotlin"
    
    >> println(s1 ==s2)
    >> println(s1.contentEquals(s2))
    false
    false
    
    是否包含contains
    val string = "Kotlin"
    
    >> println(string.contains("K"))
    true
    
    舍弃字符串drop
    val string = "I like beautiful girl"
    
    // 舍弃前3个字符
    >> println(string.drop(3))
    ike beautiful girl
    
    // 删除从前开始连续不中断满足条件的字符。一下2条语句做对比
    val string = "I like beautiful girl"
    
    >> println(string.dropWhile { it.isLetter() })
     like beautiful girl
     
    val string = "like beautiful girl"
    
    >> println(string.dropWhile { it.isLetter() })
     beautiful girl
     
    以上2个都是碰到空格被中断了,即使后面的满足条件也不舍弃
    

    相反的还有 dropLast() / dropLastWhile{},用法一样,只是从后面开始

    截取字符串
    val string = "I like beautiful girl"
    
    // 截取前6个字符
    >> println(string.take(6))
    I like
    
    // 从前面截取满足条件的字符串,不能被中断,同drop规则
    >> println(string.takeWhile { it.isUpperCase() })
    I
    

    相反的还有 takeLast() / takeLastWhile{},用法一样,只是从后面开始

    替换字符串
    val string = "I like beautiful girl"
    
    >> println(string.replace("like", "love"))
    I love beautiful girl
    
    // 替换第一个满足条件的字符串
    >> println(string.replaceFirst("l","L"))
    I Like beautiful girl
    
    // 将第一个空格后面的所有字符串替换成Love money
    >> println(string.replaceAfter(" ", "Love money"))
    I Love money
    
    // 将第一个空格前面的所有字符串替换成Everyone
    >> println(string.replaceBefore(" ", "Everyone"))
    Everyone like beautiful girl
    
    
    

    与之对应的还有 replaceAfterLast() / replaceBeforeLast()

    多行字符串 """ ... """

    多行字符串能将多行的字符原样输出,保证其格式不变

    相关文章

      网友评论

          本文标题:Kotlin学习笔记(三)—— 字符和字符串

          本文链接:https://www.haomeiwen.com/subject/bnijgctx.html