美文网首页Android控件使用篇Android专题
Kotlin中如何实现跳出指定外部循环,而非当前循环体

Kotlin中如何实现跳出指定外部循环,而非当前循环体

作者: 千夜零一 | 来源:发表于2021-02-05 17:56 被阅读0次

前言

  你是否对当前循环体和外部循环,理解不到位,截取不到你想要的字符串?举个🌰栗子:比如我需要对一个字符串earTag = ["9840000005096366"],进行各种操作,实现取出newEarTag = 5096366 。
  其中,对0000005096366,这串数字进行取值的时候,在找解决方法的时候我发现Java中的很多countinue和break的操作来跳出循环的方式,无法照搬到Kotlin中实现类似功能。


发现问题

  为什么需要跳出循环呢?0000005096366这串字符请问如何截取到5096366,也就是说除去前面的零,从第一个非零字符取到末尾。在遍历的时候Kotlin需要用遍历的方式去遍历每一个char,即:'0' 。但如何在遍历到非零的char时,跳出整个forEach循环呢?
  于是我搬出了度娘,百度一下你就知道!结果当然不一而足。但我发现很多是下面这种方法:

      val subStr2 = 0000005096366
      var countZero = 0  //统计subStr2中的前缀0的个数
      subStr2.forEach outSideForEach@{
                if(it == '0'){
                    ++ countZero
                }else{
                    return@outSideForEach //不为0时,跳出当前循环体
                }
            }

  而结果呢,countZero最终值为6,为什么呢?因为在统计了5次之后countZero当前值累计到了5,但当循环执行到it == '5'时(5096366中)虽然return@outSideForEach该语句进行了return但只是跳出了当前的循环体,而当下一个it == '0' (5096366中的)时,还是会累计一次,因此countZero执行了++操作,最终countZero 的值为6。
  因此该方法并不可行,它只是结束掉了满足条件时的当前循环体,而非结束掉了外部循环。


正确方案

  既然是想使用内部的某一条件达到时,需要结束最外层的循环,而非当前循环体,那么就来定义一个外部循环的执行体,当达到结束外部循环条件时,终结掉其生命,forEach不再往下执行。

      val subStr2 = 0000005096366
      var countZero = 0  //统计subStr2中的前缀0的个数
      run outside@{
            subStr2.forEach {
                if(it == '0'){
                    ++ countZero
                }else{
                    return@outside //不为0时跳出forEach外部循环,不再进行遍历操作
                }
            }
       }

方法封装

  解决问题是次要,抓住和分析问题的痛点才是最难的。记录下来,以便抽查哈哈。最后将上述的解决方案封装成一个方法方便调用:

fun doStrThing(earTag:String) : String{
        //截取指定字符串
        val subStr1 = earTag.subSequence(2,earTag.length-2)  //9840000005096366
        val subStr2 = subStr1.subSequence(3,subStr1.length)  //0000005096366
        var countZero = 0  //统计subStr2中的前缀0的个数
        run outside@{
            subStr2.forEach {
                if(it == '0'){
                    ++ countZero
                }else{
                    return@outside //不为0时跳出forEach循环
                }
            }
        }
        val subStr3 = subStr2.subSequence(countZero,subStr2.length) //5096366
        return subStr3.toString()
    }

大功告成!!!

相关文章

  • Kotlin中如何实现跳出指定外部循环,而非当前循环体

    前言   你是否对当前循环体和外部循环,理解不到位,截取不到你想要的字符串?举个?栗子:比如我需要对一个字符串ea...

  • Kotlin在forEach中如何跳出循环和跳出当前循环体

    Kotlin在forEach中如何跳出循环和跳出当前循环体 数组的forEach中直接retrun 那么输出结果是...

  • java-break

    break跳出指定的循环体。但是如果是嵌套循环时,break只能跳出最内层的循环,因此如果需要跳出指定的循环体,可...

  • break和continue的区别

    在循环体中,break是跳出整个循环,continue是跳出当前一次的循环

  • Python札记15_break、continue、else

    break:在某个地方中断循环,跳出循环体continue:从当前位置(continue所在位置)中跳到循环体最后...

  • Java流程控制

    分支语句 循环语句 continue,结束当前的本次循环break,结束循环,跳出当前循环体return,结束当前...

  • 循环控制

    break语句 使用break语句跳出当前循环体,从而中断当前循环 例题 使用break跳出循环 在嵌套的循环中使...

  • break, continue,return区别

    break跳出上一层循环,不再执行循环(结束当前的循环体)continue跳出本次循环,继续执行下次循环(结束正在...

  • break与continue的区别

    在循环体内,break语句和continue语句的区别在于: 使用break语句是跳出当前循环,并执行当前循环之后...

  • C# 跳出循环

    C# 跳出循环 break语句:终止并跳出循环体。 continue语句:终止当前循环,重新开始一个新的循环。 g...

网友评论

    本文标题:Kotlin中如何实现跳出指定外部循环,而非当前循环体

    本文链接:https://www.haomeiwen.com/subject/cergtltx.html