-
字符串的截取 substring
substring 字符串截取,substring函数支持IntRange类型(表示一个整数范围的类型)的参数,until创建的范围不包括上限值。
val index :Int =NAME.indexOf("'")
val str2= NAME.substring(0,index) //Java 写法
val str=NAME.substring(0 until index)
println(str)
println(str2)
-
分割字符串并返回数组split
split函数返回的是List集合数据, List集合又支解构语法特性它允许你在一个表达式里给多个变量赋值, 解构常用来简化变量的赋值。
val data=NAMES.split(",")
println(data?.get(0))
println(data?.get(1))
println(data?.get(2))
val(origin,dest,proxy)=NAMES.split(",") //解构语法
println("$origin $dest $proxy")
字符缓替换 replace 配合when 表达式 来处理字符串的替换
val str1 ="The people's Republic of china."
val str3= str1.replace(Regex("[aeiou]")){
when (it.value){
"a" -> "8"
"e" -> "6"
"i" -> "9"
"o" -> "1"
"u" -> "3"
else -> it.value
}
}
println(str1)
println(str3)
-
字符串比较 kotlin 版本
fun main() {
//字符串比较
//>在Kotlin中,用==检查两个字符串中的字符是否匹配,
// 用===检查两个变量是否指向内存堆上同一对象,
// 布在Java中==做引用比较,结构比较时用equals方法。
val str1="Jason"
val str2="Jason"
println(str1==str2)
println(str1===str2)
}
通过打印日志我们发现在kotlin 里面我们使用==比较的时候 是比较字符串的内容,如果内容相同那么就相等 === 比较的是两个变量是否指向内存堆上面的同一个对象 当字符串没有被重新赋值的时候 是相等 如果重新赋值开辟了新的内存地址 就返回了false
-
字符串比较Java版本
import kotlin.jvm.internal.Intrinsics;
public class StringtestJava {
public static void main(String[] args) {
String str1 = "Jason";
String str2 = "jason";
str2=str2.replaceFirst("jason","Jason");
System.out.println("str2-- > "+str2);
boolean var2 = Intrinsics.areEqual(str1, str2);
System.out.println(var2);
var2 = str1 == str2;
System.out.println(var2);
}
}
修改后版本
import kotlin.jvm.internal.Intrinsics;
public class StringtestJava {
public static void main(String[] args) {
String str1 = "Jason";
String str2 = "jason";
str2=str2.replaceFirst("jason","Jason");
System.out.println(str1.equals(str2));
System.out.println(str1==str2);
// System.out.println("str2-- > "+str2);
// boolean var2 = Intrinsics.areEqual(str1, str2);
// System.out.println(var2);
// var2 = str1 == str2;
// System.out.println(var2);
}
}
通过我们的观察在java里面我们使用的是equals 来比较字符串的内容 通过== 来比较两个字符串的变量是否指向内存堆上面同一个对象