Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 被给定数组的逻辑卡住了_Kotlin - Fatal编程技术网

Kotlin 被给定数组的逻辑卡住了

Kotlin 被给定数组的逻辑卡住了,kotlin,Kotlin,我有以下代码: val string = "<p></p>this<p></p>" val arrs = listOf("<p data-id=\"1\"></p>", "<p data-id=\"2\"></p>") var replacedString = "" arrs.for

我有以下代码:

val string = "<p></p>this<p></p>"
val arrs = listOf("<p data-id=\"1\"></p>", "<p data-id=\"2\"></p>")
var replacedString = ""
arrs.forEach {
    val pTag = "<p></p>"
    replacedString = string.replace(pTag, it) // <-- I know this is the culprit, but I got stuck. don't know what to do anymore
}
println(replacedString)

val string=“

这个那个” val arrs=listOf(“

”、“

”、“

”)

等等等等

有几个问题

  • .replace
    将替换字符串中出现的所有。这可能是你不想要的。也许您需要使用
    replaceFirst

  • replacedString
    在每个
    forEach
    过程中都会被覆盖。因此,它将只具有上一次迭代的值,这是您观察到的结果。理想情况下,在此处使用
    StringBuilder
    ,并在每次传递时附加
    replaceString
    结果

  • 所以实际上,

    var replacedString = string 
    arrs.forEach {
        val pTag = "<p></p>"
        replacedString = replacedString.replaceFirst(pTag, it))
    } 
    println(replacedString)
    
    var replacedString=string
    阿里斯·弗雷奇{
    val pTag=“

    ” replacedString=replacedString.replaceFirst(pTag,it)) } println(替换字符串)
    希望这能让你继续前进

    funmain(args:Array){
    
    fun main(args: Array<String>) {
        println(replacePtag("<p></p>this<p></p><p></p>that"))
        //<p data-id=1></p>this<p data-id=2></p><p data-id=3></p>that
        println(replacePtag("<p></p>this<p></p>"))
        //<p data-id=1></p>this<p data-id=2></p>
    }
    
    fun replacePtag(inputHtml: String): String {
        val tag = "<p></p>"
        fun p(id: Int): String = "<p data-id=$id></p>"
        var input = inputHtml
        var currentId = 1
        var tmp = input.replaceFirst(tag, p(currentId))
        currentId++
        while (tmp != input) {
            input = tmp
            tmp = tmp.replaceFirst(tag, p(currentId))
            currentId++
        }
        return input
    }
    
    println(replacePtag(“这个那个”)) //

    这个

    那个 println(替换标记(“

    ”) //

    } fun replacePtag(inputtml:String):String{ val tag=“

    ” funp(id:Int):String=“

    ” var输入=inputHtml var currentId=1 var tmp=input.replaceFirst(标记,p(当前ID)) 当前ID++ while(tmp!=输入){ 输入=tmp tmp=tmp.replaceFirst(标记,p(当前ID)) 当前ID++ } 返回输入 }
    你能给我看一下上面完整的伪代码吗?@mending3用伪代码更新了它很接近了。它向我显示了

    尽管这是意外的,但我看到了问题。已相应更新。有更有效的方法来做到这一点,这将是目前的工作
    
    var replacedString = string 
    arrs.forEach {
        val pTag = "<p></p>"
        replacedString = replacedString.replaceFirst(pTag, it))
    } 
    println(replacedString)
    
    fun main(args: Array<String>) {
        println(replacePtag("<p></p>this<p></p><p></p>that"))
        //<p data-id=1></p>this<p data-id=2></p><p data-id=3></p>that
        println(replacePtag("<p></p>this<p></p>"))
        //<p data-id=1></p>this<p data-id=2></p>
    }
    
    fun replacePtag(inputHtml: String): String {
        val tag = "<p></p>"
        fun p(id: Int): String = "<p data-id=$id></p>"
        var input = inputHtml
        var currentId = 1
        var tmp = input.replaceFirst(tag, p(currentId))
        currentId++
        while (tmp != input) {
            input = tmp
            tmp = tmp.replaceFirst(tag, p(currentId))
            currentId++
        }
        return input
    }