如何更换字符串的部分和更多。斯威夫特4

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更换字符串的部分和更多。斯威夫特4相关的知识,希望对你有一定的参考价值。

我有一个字符串:

"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;,在循环内替换它并将字符串插入关键字部分会更好。

我真的迷失了。有人提到使用索引和子字符串函数来返回新字符串,但我不知道如何处理它。

谢谢。

答案

首先,您必须找到您的关键字(在这种情况下是LesionLocTESTTEST)。您可以使用带有正则表达式NSRegularExpression&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;

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

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

do {
    let regex = try NSRegularExpression(pattern: "&lt;&lt;[a-z0-9]+&gt;&gt;", options: NSRegularExpression.Options.caseInsensitive)
    for text in regex.matches(in: string, options: [], range: NSRange(location: 0, length: string.count)).reversed() {
        let keyword = (string as NSString).substring(with: text.range).replacingOccurrences(of: "&lt;&lt;", with: "").replacingOccurrences(of: "&gt;&gt;", with: "")
        let newString = "&lt;span class="span_dropdowntext" keyword="(keyword)" style="color:blue;font-weight:bold;"contenteditable="False"&gt;(keyword)&lt;/span&gt;"
        string = (string as NSString).replacingCharacters(in: text.range, with: newString)
    }
    print(string)
} catch {
    print(error.localizedDescription)
}
另一答案
 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”。我不知道你是否想删除它.​​.但如果你这样做,你应该知道如何。

以上是关于如何更换字符串的部分和更多。斯威夫特4的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 字符 0 周围的值无效 |斯威夫特 4

斯威夫特用户界面。如何访问/操作视图之间的数据

如何在 Webview 上显示网站的特定部分? (Xcode 7 斯威夫特 2)

uicollectionview 在底部滚动加载更多数据。 iOS 斯威夫特

解决方案电影标题中缺少代码的片段,完成挑战更多[关闭]

单元测试iOS中的子模块静态函数? (斯威夫特 4 - Xcode)