当前位置: 首页 > 面试题库 >

快速上色所有出现的字符串

潘秦斩
2023-03-14
问题内容

此代码

var textSearch="hi"
var textToShow="hi hihi hi" 
var rangeToColor = (textToShow as NSString).rangeOfString(textSearch)
var attributedString = NSMutableAttributedString(string:textToShow)
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.yellowColor() , range: rangeToColor)
TextView.attributedText=attributedString

给了我NSRange为TextView内部的字符串着色。问题是我只返回第一次出现。如果单词包含“ hi hihi hi”,则仅第一个“
hi”会被上色。如何获得所有出现的字符串?


问题答案:

斯威夫特5

let attrStr = NSMutableAttributedString(string: "hi hihi hey")
let inputLength = attrStr.string.count
let searchString = "hi"
let searchLength = searchString.characters.count
var range = NSRange(location: 0, length: attrStr.length)

while (range.location != NSNotFound) {
    range = (attrStr.string as NSString).range(of: searchString, options: [], range: range)
    if (range.location != NSNotFound) {
        attrStr.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.yellow, range: NSRange(location: range.location, length: searchLength))
        range = NSRange(location: range.location + range.length, length: inputLength - (range.location + range.length))
    }
}

迅捷3

let attrStr = NSMutableAttributedString(string: "hi hihi hey")
let inputLength = attrStr.string.characters.count
let searchString = "hi"
let searchLength = searchString.characters.count
var range = NSRange(location: 0, length: attrStr.length)

while (range.location != NSNotFound) {
    range = (attrStr.string as NSString).range(of: searchString, options: [], range: range)
    if (range.location != NSNotFound) {
        attrStr.addAttribute(NSForegroundColorAttributeName, value: UIColor.yellow(), range: NSRange(location: range.location, length: searchLength))
        range = NSRange(location: range.location + range.length, length: inputLength - (range.location + range.length))
    }
}

迅捷2

let attrStr = NSMutableAttributedString(string: "hi hihi hey")
let inputLength = attrStr.string.characters.count
let searchString = "hi"
let searchLength = searchString.characters.count
var range = NSRange(location: 0, length: attrStr.length)

while (range.location != NSNotFound) {
    range = (attrStr.string as NSString).rangeOfString(searchString, options: [], range: range)
    if (range.location != NSNotFound) {
        attrStr.addAttribute(NSForegroundColorAttributeName, value: UIColor.yellowColor(), range: NSRange(location: range.location, length: searchLength))
        range = NSRange(location: range.location + range.length, length: inputLength - (range.location + range.length))
    }
}


 类似资料:
  • 问题内容: 我正在尝试查找“ |”的所有出现 在一个字符串中。 但我得到一个错误: 问题答案: 功能: 将返回的索引列表中的出现。

  • 问题内容: 可以说我有一串。如何编写将字符串转换为的方法?还是那里有可用的方法实现? 到目前为止我尝试过的 我正在用它来编写休眠标准。它适用于但不适用。Havent尝试了其他任何字符串。 问题答案: 您可以从0到提取子字符串形式。在此子字符串中,将所有替换为空字符串。之后,与subtring合并(从头到尾)。 就像是:

  • 问题内容: 我正在尝试使用JSON从服务器获取对象数组。 服务器向我发送以下字符串。 现在,如果您仔细查看字符串,您会发现它包含一个 而不是every 。该字符串目前无法格式化为JSONArray。所以,我需要更换的每个实例 有 ,这将有一个非常简单的任务,也 没有一个 转义序列 。 我尝试使用以下代码。 但这给了我以下例外。 我的整个代码,以防万一: 问题答案: 试试这个: 因为反斜杠是正则表达

  • 问题内容: 我需要解析一个HTML文档并查找其中所有出现的字符串。 我目前将HTML加载到字符串变量中。我只需要字符位置,这样我就可以遍历列表以在字符串之后返回一些数据。 该函数仅返回第 一个 匹配项。如何 全部 归还呢? 问题答案: 在不使用正则表达式的情况下,类似这样的方法应该可以返回字符串位置:

  • 问题内容: 我在这里有Swift的String类的扩展,该扩展返回给定子字符串的第一个字母的索引。 谁能帮我做到这一点,这样它将返回所有出现的数组,而不仅仅是第一个出现的数组? 谢谢。 例如,除了返回值,我想要类似 问题答案: 您只是不断扩大搜索范围,直到找不到子字符串的任何更多实例:

  • 问题内容: 我有这个字符串: 正在做: 似乎只删除了上面字符串中的第一个匹配项。 如何替换 所有 出现的内容? 问题答案: 注意:请勿在对性能有要求的代码中使用此代码。 作为简单文字字符串的正则表达式的替代方法,您可以使用 一般模式是 在某些情况下,它过去比使用和正则表达式要快,但是在现代浏览器中,情况似乎不再如此。 结论:如果您有性能至关重要的用例(例如,处理数百个字符串),请使用Regexp方