【问题标题】:Find range of strings查找字符串范围
【发布时间】:2015-10-02 13:17:45
【问题描述】:

我有一些格式如下的字符串:

有______个上诉

有 ______ 头牛和 ______ 只羊

有______红花,______绿花和______黄花

其中 ______ 代表字符串的可编辑部分。

这些字符串包含在 UITextView 中,但我只希望 ______ 字段是可编辑的,而其余字符串是只读的。

我已尝试实现 "textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String)" 方法,以便将编辑限制在 ______ 存在的范围内。但是我在计算______字符串的范围时遇到了一些麻烦。

我对 UITextView 进行了子类化,添加了一个变量:

var characterWhereEditIsAllowed: Character = "_"

并尝试计算从“characterWhereEditIsAllowed”第一次出现到最后一次出现的范围,如下所示:

guard let editableChracter = editableCharacter else {
   return
}

guard let idx = text.characters.indexOf(editableChracter) else {
   return
}

editableCharacterStartIndex = text.startIndex.distanceTo(idx)

我在 textview 文本中找不到最后一次出现“_”的索引。感谢您的帮助。

P.S:我尝试过使用“rangeOfString”方法,但由于“______”字段的大小不同,我无法检查特定长度的“字符串”。

【问题讨论】:

  • 如何使用正则表达式查找所有不同长度的“_”实例? NSRegularExpression 将返回一个范围数组。

标签: ios swift uitextview


【解决方案1】:

使用正则表达式:

let text = "There is ______ red flowers, ______ green flowers and ______ yellow flowers"
let regex = try! NSRegularExpression(pattern: "_+", options: [])
let matchRanges = regex.matchesInString(text, options: [], range: NSMakeRange(0, text.characters.count)).map { $0.range }

print(matchRanges) // matchRanges is an Array<NSRange>

【讨论】:

    猜你喜欢
    • 2013-06-04
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多