💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## String: 字符串类型——[kotlin.String](https://www.w3cschool.cn/doc_kotlin/kotlin-api-latest-jvm-stdlib-kotlin--string-index.html?lang=en) [TOC] Kotlin的字符串用 String 类型表示。对应Java中的 java.lang.String 。字符串是不可变的。另外,在Kotlin中,String同样是final不可继承的。 ![](https://box.kancloud.cn/58023925f2b68f997ceca2e528770fda_373x175.png) ### 重载 + 操作符 从上图可以看出:字符串类重载了 + 操作符,作用对象可以是任何对象,包括空引用 ``` fun main(args: Array<String>) { println("abc".plus(true))//abctrue println("abc"+false)//abcfalse println("abc"+1)//abc1 println("abc"+1.20)//abc1.2 println("abc"+100L)//abc100 println("abc"+"cdef")//abccdef println("abc"+'z')//abcz println("abc"+arrayOf(1,2,3,4,5))//abc[Ljava.lang.Integer;@5e481248 } ``` ### 索引运算符 s[i] 字符串的元素——字符可以使用索引运算符 s[i] 来访问。 ~~~ val str1: String = "abcdefghijk" println(str1[2])//c println(str1[-1])//下标越界 ~~~ 上面下标越界,报错 ``` Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at java.lang.String.charAt(String.java:658) ``` 可以看出,索引运算符 s[i] 会被翻译成 java.lang.String.charAt() , 背后调用的是Java的String类。其调用的方法是 ~~~ public char charAt(int index) { if ((index < 0) || (index >= value.length)) { throw new StringIndexOutOfBoundsException(index); } return value[index]; } ~~~ ### 不同的种类 在Kotlin 中,使用String表示字符串类型,有如下两类字符串: * **普通字符串**:这种字符串类似于Java,可以在字符串中加上转义符,如\n,会让转义符后面的字符串换到下一行,这种字符串**需要放在双引号中**。 * **保留原始格式的字符串(raw string)**:这种字符串不能使用转义符,如果字符串中带有格式,如换行,直接写在字符串中即可。这种字符串**需要放在3个引号对中,无论引号间是什么,都会是它原原本本的值,** 示例 ``` fun main(args: Array<String>){ //第一类字符串(与Java类似) var s1="hello \n world" var s2:String="世界\n你好" println(s1) println(s2) // 第二类字符串,保留原始格式 var s3=""" hello world I love you """ println(s3) val rawString = """ fun helloWorld(val name : String) { println("Hello, world!") } """ println(rawString) } ``` 输出结果 ``` hello world 世界 你好 hello world I love you fun helloWorld(val name : String) { println("Hello, world!") } ``` 可以⽤ + 操作符连接字符串。这也适⽤于连接字符串与其他类型的值, 只要表达式中的第⼀个元素是字符串: ``` val s = "abc" + 1 println(s + "def") ``` >[info]注意:在⼤多数情况下,优先使⽤字符串模板或原始字符串⽽不是字符串连接。 ### Kotlin相比于Java | 相比于java | 描述            | | ------- | ------------- | | 增强      | 字符串可以遍历       | | 差异      | split传入参数不是正则 | | 增强      | 拆分支持多字符       | | 增强      | 字符串截图多了很多方法   | | 增强      | 去空格多了方法       | | 增强      | 支持三重引号,格式输出方便  | | 增强      | 字符串模板,拼接字符串更强大 |