kotlin数组操作
1示例height [0,1,0,2,1,0,1,3,2,1,2,1] 转为 kotlin IntArray 数组valheight:IntArrayintArrayOf(0,1,0,2,1,0,1,3,2,1,2,1)2 数组转子串IntArray 转 字符串一整个拼接成带方括号格式和打印效果一致valarrintArrayOf(0,1,0,2,1,0,1,3,2,1,2,1)valstrarr.contentToString()println(str)// 输出[0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]只拼接数字无括号空格逗号分隔valstr2arr.joinToString(,)// 0,1,0,2,1,0,1,3,2,1,2,1直接连起来纯数字字符串无分隔符valstr3arr.joinToString()// 010210132121Java int [] 对应写法对照int[]arr{0,1,0,2,1,0,1,3,2,1,2,1};StringsArrays.toString(arr);3 遍历一个数字字符串找出其中最大数字funfindMaxDigit(str:String):Char{// 空串判空if(str.isEmpty())return0varmaxstr[0]for(cinstr){if(cmax){maxc}}returnmax}**// 极简一行版**valmaxCharstr.maxOrNull()?:0如vals010210132121valmaxs.maxOrNull()println(max)// 输出 3java示例publicstaticcharfindMax(Strings){if(snull||s.length()0)return0;charmaxs.charAt(0);for(inti0;is.length();i){charcs.charAt(i);if(cmax)maxc;}returnmax;}4 Kotlin 字符转数字Char → Int方式 1推荐标准函数 digitToInt()仅支持 ‘0’~‘9’其他字符会直接抛异常。valc:Char5valnum:Intc.digitToInt()println(num)// 5方式 2ASCII 减法最底层原理字符’0’ASCII 码是 48减去基准值即可valc7valnumc-0printlin(num)//7方式 3安全转换防止报错valcavalnumc.digitToIntOrNull()?:0//安全兜底为空就赋值 0字符串整体转数字valstr123valnstr.toInt()java 对应写法charc6;intnumc-0;5 怎样提取字符串指定序号位置左右两边的子串说明字符串索引s[0] 是第一个字符左侧0 ~ i-1当前位i右侧i1 ~ s.length-1最简单截取valstrabcdefghvali3valleftPartstr.substring(0,i)// 下标0~2valrightPartstr.substring(i1)// 下标4到末尾valcurCharstr[i]println(左$leftPart)println(当前$curChar)println(右$rightPart)输入 abcdefghi3结果左abc当前d右efgh2、封装成工具函数/** * 根据下标i拆分字符串左边、当前字符、右边 * param str 原字符串 * param i 指定索引 * return Triple(左侧串, 当前字符, 右侧串) */funsplitByIndex(str:String,i:Int):TripleString,Char,String{require(iinstr.indices){下标越界}valleftstr.take(i)valmidstr[i]valrightstr.drop(i1)returnTriple(left,mid,right)}如果是 List / 数组 按索引拆分funTsplitListByIndex(list:ListT,i:Int):TripleListT,T,ListT{valleftlist.subList(0,i)valmidlist[i]valrightlist.subList(i1,list.size)returnTriple(left,mid,right)}调用vals1234567val(left,mid,right)splitByIndex(s,4)println(left)// 1234println(mid)// 5println(right)// 676 根据下标 i 把 IntArray 切分成 左侧数组 右侧数组/**将IntArray按下标i分割为左右两个数组i位置元素舍弃param array 原数组param i 分割下标return Pair(左侧数组, 右侧数组)*/funsplitIntArrayByIndex(array:IntArray,i:Int):PairIntArray,IntArray{require(iinarray.indices){下标越界}valleftarray.take(i).toIntArray()valrightarray.drop(i1).toIntArray()returnlefttoright}使用示例funmain(){valarrintArrayOf(1000,999,998,997,966)valindex3val(leftArr,rightArr)splitIntArrayByIndex(arr,index)println(leftArr.contentToString())// [1000, 999, 998]println(rightArr.contentToString())// [966]}如果你需要保留 i 当前元素返回三段左、当前、右funsplitTriple(array:IntArray,i:Int):TripleIntArray,Int,IntArray{require(iinarray.indices)valleftarray.take(i).toIntArray()valmidarray[i]valrightarray.drop(i1).toIntArray()returnTriple(left,mid,right)}Java 等价写法publicstaticint[][]splitArray(int[]arr,inti){int[]leftArrays.copyOfRange(arr,0,i);int[]rightArrays.copyOfRange(arr,i1,arr.length);returnnewint[][]{left,right};}注意边界情况处理i 0左边为空字符串i str.lastIndex右边为空字符串传入非法下标会抛异常可加 try-catch 捕获