一、字符串字面量
- 普通字符串:使用双引号
"
括起来的字符串。
- 原始字符串:使用三个双引号
"""
括起来的字符串。
val a = "你好。" // 你好。 普通字符串
val b = """你\n好""" // 你\n好 原始字符串
二、不可变字符串
- 定义
方式 |
案例 |
使用字符串字面量赋值 |
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 |
-
字符串拼接:可以使用
+
和 +=
运算符拼接字符串。
val a = "hello"
var b = a + " " // "hello "
b += "world" // "hello world"
-
字符串模板:
字符串模板以$开头
语法 |
$变量或常量 |
${表达式} // 任何表达式,也可以是单个变量或常量 |
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}日
"""
-
字符串查找:String类中提供了
indexOf
和 lastIndexOf
函数用于查找字符或字符串。
-
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
- 字符串比较
- 比较相等:
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
- 字符串截取
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
}
三、可变字符串
- StringBuilder
定义 |
描述 |
StringBuilder() |
创建字符串内容是空的StringBuilder对象,初始容量为16个字符。 |
StringBuilder(seq: CharSequence) |
指定CharSequence字符串创建StringBuilder对象。 |
StringBuilder(capacity: Int) |
创建字符串内容是空的StringBuilder对象,初始容量由参数capacity指定。 |
StringBuilder(str: String) |
指定String字符串创建StringBuilder对象。 |
- 字符串追加、插入、删除和替换
方法名 |
描述 |
返回值 |
append |
添加 |
StringBuilder |
insert |
插入 |
StringBuilder |
delete |
删除 |
StringBuilder |
replace |
替换 |
StringBuilder |
四、正则表达式
- 创建 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
}
- 字符串匹配
方法 |
描述 |
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
}
- 字符串查找
方法 |
描述 |
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
- 字符串替换
方法 |
描述 |
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
}
- 字符串分割
方法 |
描述 |
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]
}
网友评论