如何替换字符串等。斯威夫特4

时间:2018-11-20 01:13:48

标签: swift string indexing substring

我有一个字符串:

"Location: &lt;&lt;LesionLoc&gt;&gt;<br>
Quality: &lt;&lt;TESTTEST&gt;&gt;<br>"

最终结果应为:

Location: &lt;span class=\"span_dropdowntext\" keyword=\"LesionLoc\" style=\"color:blue;font-weight:bold;\"contenteditable=\"False\"&gt;LesionLoc&lt;/span&gt;
Quality: &lt;span class=\"span_dropdowntext\" keyword=\"TESTTEST\" style=\"color:blue;font-weight:bold;\"contenteditable=\"False\"&gt; TESTTEST&lt;/span&gt;

如您所见,我要做的就是:

  1. &lt;&lt;替换为&lt;span class=\"span_dropdowntext\" keyword=\"LesionLoc\" style=\"color:blue;font-weight:bold;\"contenteditable=\"False\"&gt;

  2. &gt;&gt;替换为&lt;/span&gt;

  3. 最后,(这让我很难受),将字符串“ LesionLoc”和“ TESTTEST”插入keyword=/"/"部分。

替换很容易,只需要使用string.replacingOcurences即可,但是我认为最好遍历所有&lt;&lt;&gt;&gt;,在循环内替换并插入字符串会更好进入关键字部分。

我真的迷失了。有人提到使用索引和子字符串函数来返回新字符串,但是我不确定如何实现。

谢谢。

2 个答案:

答案 0 :(得分:1)

首先,您必须找到关键字(在这种情况下为LesionLocTESTTEST)。您可以使用带有正则表达式格式NSRegularExpression的{​​{1}}来找到它

下一步,将您的&lt;&lt;[a-z0-9]+&gt;&gt;替换为

&lt;&lt;

&lt;span class=\"span_dropdowntext\" keyword=\"<KEYWORD>\"style=\"color:blue;font-weight:bold;\"contenteditable=\"False\"&gt; &gt;&gt;

您可以使用此非常简单的代码

&lt;/span&gt;

答案 1 :(得分:0)

 private func replaceString(_ str : String)->String{
    guard let keyword = findKeyword(str) else{
        fatalError()
    }
    let replacementString = "&lt;span class=\"span_dropdowntext\" keyword=\"\(keyword)\" style=\"color:blue;font-weight:bold;\"contenteditable=\"False\"&gt;"

    var newString = str.replacingOccurrences(of: "&gt;&gt", with: "&lt;/span&gt")
    newString = newString.replacingOccurrences(of: "&lt;&lt;", with: replacementString)
    return newString
}

private func findKeyword(_ s : String)->String?{
    var str = Array(s)
    let firstKey = "&lt;&lt;"
    let secondKey = "&gt;&gt"

    var startingIndex : Int = 0
    var movingIndex : Int = 0

    while  movingIndex < str.count + 1 - secondKey.count && startingIndex < str.count + 1 - firstKey.count{
        if String(str[startingIndex..<startingIndex + firstKey.count]) != firstKey{
            startingIndex += 1
        }else{
            if movingIndex < startingIndex + firstKey.count{
                movingIndex = startingIndex + firstKey.count
            }else{
                if String(str[movingIndex..<movingIndex + secondKey.count]) != secondKey{
                    movingIndex += 1
                }else{
                    return String(str[startingIndex+firstKey.count..<movingIndex])
                }
            }
        }
    }

    return nil
}

现在,您可以使用replaceString函数完成工作

let string = "Location: &lt;&lt;LesionLoc&gt;&gt;<br>"
print(replaceString(string))

您的最终结果将是

Location: &lt;span class="span_dropdowntext" keyword="LesionLoc" style="color:blue;font-weight:bold;"contenteditable="False"&gt;LesionLoc&lt;/span&gt;<br>

结果字符串的末尾有一个“ br”。我不知道您是否要删除该文件。.但是,如果这样做,您应该知道如何删除。