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<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]
    
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355