美文网首页
Kotlin基础认识 (6)字符串

Kotlin基础认识 (6)字符串

作者: 狼性代码人 | 来源:发表于2019-05-23 11:32 被阅读0次

    一、字符串字面量

    • 普通字符串:使用双引号 " 括起来的字符串。
    • 原始字符串:使用三个双引号 """ 括起来的字符串。
    val a = "你好。"      //  你好。      普通字符串
    val b = """你\n好"""  //  你\n好     原始字符串
    

    二、不可变字符串

    1. 定义
    方式 案例
    使用字符串字面量赋值 val a = "hello world"
    使用转换函数 1、fun String(bytes: ByteArray, offset: Int, length: Int, charset: Charset) : String
    2、fun String(chars: CharArray, offset: Int, length: Int) : String
    3、fun String(stringBuilder: StringBuilder): String
    1. 字符串拼接:可以使用 ++= 运算符拼接字符串。
    val a = "hello"
    var b = a + " "    // "hello "
    b += "world"       // "hello world"
    
    1. 字符串模板:字符串模板以$开头
    语法
    $变量或常量
    ${表达式} // 任何表达式,也可以是单个变量或常量
    val age = 18
    val s1 = "你的年龄是${age}岁。"
    val now = java.util.Date()
    val s2 = "今天是${now.year + 1900}年${now.month}月${now.day}日"
    val s3 = """今天是:
    ${now.year + 1900}年
    ${now.month}月
    ${now.day}日
    """
    
    1. 字符串查找:String类中提供了 indexOflastIndexOf 函数用于查找字符或字符串。
    • indexOf:从前往后查找字符或字符串,返回第一次找到字符或字符串所在处的索引,没有找到返回-1。
    fun String.indexOf(
        char: Char,                     // 要查找的字符
        startIndex: Int = 0,            // 指定查找开始的索引
        ignoreCase: Boolean = false     // 是否忽略大小写进行匹配
    ): Int
    
    fun String.indexOf(
        string: String,                 // 要查找的字符串
        startIndex: Int = 0,            // 指定查找开始的索引
        ignoreCase: Boolean = false     // 是否忽略大小写进行匹配
    ): Int
    
    • lastIndexOf:从后往前查找字符或字符串,返回第一次找到字符或字符串所在处的索引,没有找到返回-1。
    fun String.lastIndexOf(
        char: Char,                     // 要查找的字符
        startIndex: Int = 0,            // 指定查找开始的索引
        ignoreCase: Boolean = false     // 是否忽略大小写进行匹配
    ): Int
    
    fun String.lastIndexOf(
        string: String,                 // 要查找的字符串
        startIndex: Int = 0,            // 指定查找开始的索引
        ignoreCase: Boolean = false     // 是否忽略大小写进行匹配
    ): Int
    
    1. 字符串比较
    • 比较相等:equals==!=
    • 比较大小:compareTo函数按字典顺序比较两个字符串。如果当前字符串等于参数字符串,则返回0;如果当前字符串位于参数字符串之前,则返回一个小于0的值;如果当前字符串位于参数字符串之后,则返回一个大于0的值。
    fun String.compareTo(other: String, ignoreCase: Boolean = false): Int
    
    • 比较前缀和后缀
    fun String.startsWith(prefix: String, ignoreCase: Boolean = false): Boolean
    fun String.endsWith(suffix: String, ignoreCase: Boolean = false): Boolean
    
    
    1. 字符串截取
    • 指定整数区间截取字符串函数:
    fun String.substring(range: IntRange): String
    
    • 从指定索引 startIndex 开始截取直到字符串结束的子字符串:
    fun String.substring(startIndex: Int): String
    
    • 从指定索引 startIndex 开始截取直到索引 endIndex-1 处的字符,注意包括索引为 startIndex 处的字符,但不包括索引为 endIndex 处的字符:
    fun String.substring(startIndex: Int, endIndex: Int): String
    
    // 案例
    fun main(args: Array<String>) {
        val sourceStr = "There is a string accessing example."
        // 截取 example. 字符串
        val subStr1 = sourceStr.substring(28)      // example.
        // 截取 string 字符串
        val subStr2 = sourceStr.substring(11, 17)  // string
        // 参数是区间
        val subStr3 = sourceStr.substring(11..17)  // string
    }
    

    三、可变字符串

    1. StringBuilder
    定义 描述
    StringBuilder() 创建字符串内容是空的StringBuilder对象,初始容量为16个字符。
    StringBuilder(seq: CharSequence) 指定CharSequence字符串创建StringBuilder对象。
    StringBuilder(capacity: Int) 创建字符串内容是空的StringBuilder对象,初始容量由参数capacity指定。
    StringBuilder(str: String) 指定String字符串创建StringBuilder对象。
    1. 字符串追加、插入、删除和替换
    方法名 描述 返回值
    append 添加 StringBuilder
    insert 插入 StringBuilder
    delete 删除 StringBuilder
    replace 替换 StringBuilder

    四、正则表达式

    1. 创建 Regex 对象
    方式 描述
    通过构造函数创建 默认构造函数 Regex(pattern: String),其中 pattern 是正则表达式模式字符串。
    使用 toRegex() 扩展函数 String 提供扩展函数 toRegex() 返回 Regex 对象。
    fun main(args: Array<String>) {
        val pattern = """\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}"""
        val string = "kotlin@sina.com"
        // val regex = Regex(pattern)  // 通过构造函数创建
        val regex = pattern.toRegex()  // 使用 toRegex() 扩展函数
        
        println(regex.matches(string))  // true
    }
    
    1. 字符串匹配
    方法 描述
    matches(input: CharSequence): Boolean 精确匹配函数,测试输入字符串是否完全匹配正则表达式模式。
    containsMatchIn(input: CharSequence): Boolean 包含匹配函数,测试输入字符串是否部分匹配正则表达式模式。
    fun main(args: Array<String>) {
        // 全部是数字模式
        val regex = Regex("""\d+""")
    
        val input1 = "1000"
        val input2 = "¥1000"
    
        println(regex.matches(input1))  // true
        println(regex.matches(input2))  // false
    
        println(regex.containsMatchIn(input1))  // true
        println(regex.containsMatchIn(input2))  // true
    }
    
    1. 字符串查找
    方法 描述
    find(input: CharSequence, startIndex: Int): MatchResult? 查找第一个匹配模式的字符串,返回MatchResult?类型。
    finaAll(input: CharSequence, startIndex: Int): Sequence 查找所有匹配模式的字符串,返回Sequence类型,Sequence是可进行迭代集合的类型,其中放置的元素是MatchResult类型。
    fun main(args: Array<String>) {
        val string = "AB12CD34EF"
        val regex = Regex("""\d+""")
        val result = regex.find(string)
        
        println("第一个匹配字符串:${result?.value}")
        regex.findAll(string).forEach { item -> 
            println(item.value)
        }
    }
    // 输入结果
    // 第一个匹配字符串:12
    // 12
    // 34
    
    1. 字符串替换
    方法 描述
    replace(input: CharSequence, replacement: String): String input参数是输入字符串,replacement参数是要替换的新字符串,返回值返回替换之后的字符串。
    fun main(args: Array<String>) {
        val string = "AB12CD34EF"
        val regex = Regex("""\d+""")
        val result = regex.replace(string, " ")
    
        println(result) // AB CD EF
    }
    
    1. 字符串分割
    方法 描述
    split(input: CharSequence, limit: Int): List input参数是输入字符串,limit是分割字符串的最大个数,如果为0表示没有限制,返回值是List字符串集合。
    fun main(args: Array<String>) {
        
        val string = "AB12CD34EF"
        
        val regex = Regex("""\d+""")
        
        val result = regex.split(string)
    
        println(result) // [AB, CD, EF]
        
    }
    

    相关文章

      网友评论

          本文标题:Kotlin基础认识 (6)字符串

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