kotlin数组操作
📅 2026/7/17 4:41:17
👁️ 阅读次数
📝 编程学习
1:示例height = [0,1,0,2,1,0,1,3,2,1,2,1] 转为 kotlin IntArray 数组
valheight:IntArray=intArrayOf(0,1,0,2,1,0,1,3,2,1,2,1)2: 数组转子串
- IntArray 转 字符串(一整个拼接成带方括号格式,和打印效果一致)
valarr=intArrayOf(0,1,0,2,1,0,1,3,2,1,2,1)valstr=arr.contentToString()println(str)// 输出:[0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]- 只拼接数字,无括号空格,逗号分隔
valstr2=arr.joinToString(",")// 0,1,0,2,1,0,1,3,2,1,2,1- 直接连起来纯数字字符串(无分隔符)
valstr3=arr.joinToString("")// 010210132121- Java int [] 对应写法对照
int[]arr={0,1,0,2,1,0,1,3,2,1,2,1};Strings=Arrays.toString(arr);3 遍历一个数字字符串,找出其中最大数字
funfindMaxDigit(str:String):Char{// 空串判空if(str.isEmpty())return'0'varmax=str[0]for(cinstr){if(c>max){max=c}}returnmax}**// 极简一行版**valmaxChar=str.maxOrNull()?:'0'如:
vals="010210132121"valmax=s.maxOrNull()println(max)// 输出 3java示例:
publicstaticcharfindMax(Strings){if(s==null||s.length()==0)return'0';charmax=s.charAt(0);for(inti=0;i<s.length();i++){charc=s.charAt(i);if(c>max)max=c;}returnmax;}4 Kotlin 字符转数字(Char → Int)
方式 1:推荐标准函数 digitToInt()
仅支持 ‘0’~‘9’,其他字符会直接抛异常。
valc:Char='5'valnum:Int=c.digitToInt()println(num)// 5方式 2:ASCII 减法(最底层原理)
字符’0’ASCII 码是 48,减去基准值即可:
valc='7'valnum=c-'0'printlin(num)//7方式 3:安全转换,防止报错
valc='a'valnum=c.digitToIntOrNull()?:0//安全兜底,为空就赋值 0字符串整体转数字
valstr="123"valn=str.toInt()java 对应写法
charc='6';intnum=c-'0';5 怎样提取字符串指定序号位置左右两边的子串
说明:
字符串索引:s[0] 是第一个字符
左侧:0 ~ i-1
当前位:i
右侧:i+1 ~ s.length-1
- 最简单截取
valstr="abcdefgh"vali=3valleftPart=str.substring(0,i)// 下标0~2valrightPart=str.substring(i+1)// 下标4到末尾valcurChar=str[i]println("左:$leftPart")println("当前:$curChar")println("右:$rightPart")输入 abcdefgh,i=3:结果:
左:abc
当前:d
右:efgh
2、封装成工具函数
/** * 根据下标i拆分字符串:左边、当前字符、右边 * @param str 原字符串 * @param i 指定索引 * @return Triple(左侧串, 当前字符, 右侧串) */funsplitByIndex(str:String,i:Int):Triple<String,Char,String>{require(iinstr.indices){"下标越界"}valleft=str.take(i)valmid=str[i]valright=str.drop(i+1)returnTriple(left,mid,right)}如果是 List / 数组 按索引拆分
fun<T>splitListByIndex(list:List<T>,i:Int):Triple<List<T>,T,List<T>>{valleft=list.subList(0,i)valmid=list[i]valright=list.subList(i+1,list.size)returnTriple(left,mid,right)}调用:
vals="1234567"val(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):Pair<IntArray,IntArray>{require(iinarray.indices){"下标越界"}valleft=array.take(i).toIntArray()valright=array.drop(i+1).toIntArray()returnlefttoright}使用示例
funmain(){valarr=intArrayOf(1000,999,998,997,966)valindex=3val(leftArr,rightArr)=splitIntArrayByIndex(arr,index)println(leftArr.contentToString())// [1000, 999, 998]println(rightArr.contentToString())// [966]}如果你需要保留 i 当前元素,返回三段(左、当前、右)
funsplitTriple(array:IntArray,i:Int):Triple<IntArray,Int,IntArray>{require(iinarray.indices)valleft=array.take(i).toIntArray()valmid=array[i]valright=array.drop(i+1).toIntArray()returnTriple(left,mid,right)}Java 等价写法
publicstaticint[][]splitArray(int[]arr,inti){int[]left=Arrays.copyOfRange(arr,0,i);int[]right=Arrays.copyOfRange(arr,i+1,arr.length);returnnewint[][]{left,right};}注意边界情况处理
i == 0:左边为空字符串
i == str.lastIndex:右边为空字符串
传入非法下标会抛异常,可加 try-catch 捕获
编程学习
技术分享
实战经验