首页 > 解决方案 > 卡在给定数组的逻辑上

问题描述

我有这个代码:

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)

它应该显示<p data-id="1"></p>this<p data-id="2"></p>,但它显示 <p data-id="2"></p>this<p data-id="2"></p>

注意data-id值根据列表递增

主要问题是string变量和listOf意志是动态的。

例如:

val string = "<p></p>this<p></p>that<p></p>"
val arrs = listOf("<p data-id=\"1\"></p>", "<p data-id=\"2\"></p>", "<p data-id=\"3\"></p>")

或者

val string = "<p></p>this<p></p><p></p>that"
val arrs = listOf("<p data-id=\"1\"></p>", "<p data-id=\"2\"></p>", "<p data-id=\"3\"></p>")

等等等等

标签: kotlin

解决方案


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
}

推荐阅读