Kotlin基础认识 (6)字符串

一、字符串字面量

  • 普通字符串:使用双引号 " 括起来的字符串。
  • 原始字符串:使用三个双引号 """ 括起来的字符串。
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) {
    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) {
    val pattern = """\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}"""
    val string = "[email protected]"
    // 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) {
    // 全部是数字模式
    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) {
    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) {
    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) {
    
    val string = "AB12CD34EF"
    
    val regex = Regex("""\d+""")
    
    val result = regex.split(string)

    println(result) // [AB, CD, EF]
    
}

你可能感兴趣的:(Kotlin基础认识 (6)字符串)