For loop 如何在kotlin中重新启动for循环

For loop 如何在kotlin中重新启动for循环,for-loop,kotlin,iteration,restart,For Loop,Kotlin,Iteration,Restart,我在Kotlin中有这个嵌套循环的情况,假设有两个字符串“abcdef”和“bfihja”。我正在使用for循环逐字符比较这两个字符。如果存在匹配项,则将从每个字符串中删除该字符,“S2”的迭代应从开始处开始 var S1 = "abcdef" var S2 = "bfihja" for(i in S1.indices) { for(j in S2.indices){ if(S1[i]==S2[j

我在Kotlin中有这个嵌套循环的情况,假设有两个字符串“abcdef”和“bfihja”。我正在使用for循环逐字符比较这两个字符。如果存在匹配项,则将从每个字符串中删除该字符,“S2”的迭代应从开始处开始

var S1 = "abcdef"
var S2 = "bfihja"

   for(i in S1.indices) {
      for(j in S2.indices){
          
         if(S1[i]==S2[j]) {
             "character removed from each"
         }


我遇到的问题是,当字符匹配时,“S2”字符串的比较应该从头开始。我找不到重新启动它的方法。

您应该在内部for循环中使用一个范围为0到
length-of-S2
的常规for循环,当您要“重置”for循环时,只需将迭代器变量重置为0。

您可以使用一个标记为外部while循环。通过在外循环上使用
continue
,您可以重新启动迭代。您可以在外部迭代之后放置
break
,以便在完成时退出while循环

outer@while (true) {
    for (i in S1.indices) {
        for (j in S2.indices) {
            if (S1[i] == S2[j]) {
                S1 = StringBuilder(S1).deleteCharAt(i).toString()
                S2 = StringBuilder(S2).deleteCharAt(j).toString()
                continue@outer
            }
        }
    }
    break
}

如何重置迭代器?对于这个任务,val“j”不能更改,我认为如果您先对字符串排序,代码可能会更清晰、更高效。然后,只需对两个字符串进行一次扫描。谢谢,这很有效。如果我理解正确,那么这样做的目的是,当出现匹配时,字符串将被更新并使用“continue@outer“整个循环将以新字符串重新开始,当外部for循环结束时,它将向右中断..”。。??如果我错了,请纠正我。