kotlin基本语法<二> [字符串、标准函数库、list与set、循环与集合转换]

字符串

转义字符串
函数 描述
\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<Char>('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<String> = 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<String>("aa","bb","cc")
    println("name1=$name1")
    // 随机排列
    var menuList = listOf<String>("aa","bb","cc")
    println("random first ==  ${menuList.shuffled().first()}" )
只读set 可变 MutableSet MutableSet的函数
函数 描述
add 添加元素
addAll 添加另一个集合中的所有元素
+= 添加一个或多个元素
-= 删除一个或多个元素
remove 删除某个元素
removeAll 删除另一个集合中的所有元素
clear 删除所有元素

// set集合

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

推荐阅读更多精彩内容