字符串
转义字符串
函数 | 描述 |
---|---|
\t | tab键 |
\b | 回退键 |
\n | 换行 |
\r | 回车 |
\" | 双引号 |
\' | 单引号 |
\\ | 反斜杠 |
\$ | 美元符号 |
\u | unicode字符 |
字符串
// 使用substring 截取字符串
fun placeOrder(){
val TAVERN_NAME = "Taernyl's Foolly"
val indexOfApostorephe = TAVERN_NAME.indexOf('\'')
val travernMaster = TAVERN_NAME.substring(0 until indexOfApostorephe)
println("madrigal speak with $travernMaster")
}
placeOrder()
//使用split 分割字符串
fun splitOrder(){
val order = "shandy,drangon's breath ,5.91"
val data = order.split(',') // data为list类型
println("type:${data[0]} name:${data[1]} price:${data[2]}")
//结构赋值
val(type , name , price) = order.split(',')
println("type:$type name:$name price:$price")
}
splitOrder()
// replace 普通替换 与正则替换
// 使用replace 替换字符串
fun replaceStr(name:String) : String{
return name.replace('a','b');
}
// 使用relpace 正则替换
fun replaceStrReg(name:String) :String {
return name.replace(Regex("[a]")){
when(it.value){
"a" -> "b"
else -> it.value
}
};
}
println(replaceStr("aabbcc123"))
println(replaceStrReg("aabbcc123"))
//字符串比较与遍历
//字符串比较
var name1 = "aaa"
var name2 = "aaa"
println(name1 == name2) //值比较 true
println(name1 === name2) // 内存地址比较 true
var c = String(listOf('a', 'b').toCharArray())
var d = "ab"
println("c=$c d=$d c===d ${c === d}") // 内存地址比较 false
//unicode
println("unicode:" + '\u0950')
//遍历字符串
"bhb".forEach {
println(it)
}
// string int double 转换
//string转数值类型
val gold = "1.1".toDouble();
println(gold)
// int 转 double
val money = 99 ;
var intmoney = 99/100 ;
var floatmoney = 99/100.0 ;
println(" $intmoney $floatmoney")
//double 格式化
var doubleMoney = 1.111112222333
var formatMoney = "%.2f".format(doubleMoney)
println("$doubleMoney $formatMoney")
//double 转 int
var doubleMoney2 = 1.9911112222333
println(doubleMoney2.roundToInt()) //四舍五入
println(doubleMoney2.toInt()) //上取整
标准函数库
函数 | 是否传receiver值给lambda | 是否有相关作用域 | 返回 |
---|---|---|---|
let | 是 | 否 | lambda结果 |
apply | 否 | 是 | 接收者对象 |
run | 否 | 是 | lambda结果 |
with | 否 | 是 | lambda结果 |
also | 是 | 否 | 接收者对象 |
takeIf | 是 | 否 | 可空类型接收者对象 |
takeUnless | 是 | 否 | 可空类型接收者对象 |
标准函数库 apply run with let also takeIf takeUnless
list 与 set
只读List 可变 MutableList MutableList的函数
函数 | 描述 |
---|---|
[index]= | 设置指定位置的值 越界会抛出异常 |
add | 在列表尾部添加元素 |
add(index,value) | 在指定位置添加元素 |
addall | 向列表中添加同一类型列表中的全部元素 |
+= | 添加一个新元素或者新集合到列表中 |
-= | 删除列表中某个元素或从列表中删除集合所列元素 |
clear | 删除所有元素 |
removeeIf | 基于lambda表达式指定的条件删除元素 |
list基本用法
//创建list 并赋初始值 中间<>称为泛型 限制了类型
var patronList:List = listOf("aa","bb","cc")
println(patronList) // [aa, bb, cc]
// 获取list元素
println("${patronList[0]} ${patronList[1]} ${patronList[2]}" )
// 超出角标会抛出异常
// patronList[4] ArrayIndexOutOfBoundsException
// 越界取值 getOrElse
println(patronList.getOrElse(4){"default 4"})
// getOrNull
println(patronList.getOrNull(4)?:"default null 4")
// 判断list 是否包含某个值 contains
println("list is contain aa ${patronList.contains("aa")}")
println("list is contain dd ${patronList.contains("dd")}")
//判断list 是否包含list
println("list is contain aa bb ${patronList.containsAll(listOf("aa","bb"))}")
println("list is contain aa cc ${patronList.containsAll(listOf("aa","cc"))}")
println("list is contain aa dd ${patronList.containsAll(listOf("aa","dd"))}")
// 删除、添加、修改 list创建的是只读列表 不能修改
// 需要可变列表可以使用 mutableListOf
var mutableList = mutableListOf("aa","bb","cc")
mutableList.add("dd")
mutableList.remove("aa")
mutableList.remove("ee")
mutableList.add(0 , "oo")
mutableList[3] = "33"
println(mutableList)
//遍历
for (item in mutableList){
println("in 遍历 $item")
}
mutableList.forEach {
println("each 遍历 $it")
}
// 遍历每一个元素的值和位置
mutableList.forEachIndexed { index, s ->
println("$s you are in $index")
}
//解构 把list元素内的值 依次赋值给对应位置的变量
var (name1,name2,name3) = listOf("aa","bb","cc")
println("name1=$name1")
// 随机排列
var menuList = listOf("aa","bb","cc")
println("random first == ${menuList.shuffled().first()}" )
只读set 可变 MutableSet MutableSet的函数
函数 | 描述 |
---|---|
add | 添加元素 |
addAll | 添加另一个集合中的所有元素 |
+= | 添加一个或多个元素 |
-= | 删除一个或多个元素 |
remove | 删除某个元素 |
removeAll | 删除另一个集合中的所有元素 |
clear | 删除所有元素 |
// set集合
// set会自动去重
val planets = setOf("aa","bb","cc","aa","bb","cc" )
println(planets)
//是否包含某个值
println(planets.contains("aa"))
// 获取set的 第三个元素
println(planets.elementAt(2))
// set只读 需要可以改变的set可以使用 mutableSetOf
val addSet = mutableSetOf("aa" , "bb" , "cc")
println(addSet)
addSet += "dd"
println(addSet)
//while 循环与 break
//数组随机排列取第一个元素 如果满足条件就使用break提前结束 最多循环3次
var namelist = listOf( "aa","bb","cc","dd","ee")
var orderCount = 0 ;
var targetName :String? = null
while (orderCount < 3){
orderCount++
var name = namelist.shuffled().first()
if(name == "ee"){
targetName = name
break
}
}
println("遍历了$orderCount 次 最终找到了name: $targetName")
// 集合转换
// 使用toSet与toList函数 或者toMutableList 和 toMutableSet 可以实现list 和set 的相互转换
// 一个小技巧: 调用toSet去掉list集合里的重复元素
var changeSet = listOf("aa","bb","cc","aa").toSet()
println(changeSet)
var changeList = changeSet.toList()
println(changeList)
//kotlin封装了函数 distinct 先调用toSet在调用toList
var parotns = listOf("aa","bb","cc","aa").distinct()
println(parotns)
println(parotns[0])
//数组类型
// kotlin 本身不建议使用 但是如果需要调用一个java方法 java方法的入参是一个数组类型
val ages = intArrayOf(1,2,3,4,5)
数组类型 | 创建函数 |
---|---|
IntArray | intArrayOf |
DoubleArray | doubleArrayOf |
LongArray | longArrayOf |
ShortArray | shortArrayOf |
ByteArray | byteArrayOf |
FloatArray | floatArrayOf |
BooleanArray | booleanArrayOf |
Array object | arrayOf |