【发布时间】:2017-01-14 07:08:43
【问题描述】:
我需要获取一个字符串中两个单词的范围,例如:
ยัฟิแก ไฟหก
(这实际上是我在输入 PYABCD WASD)——这是一个毫无意义的测试,因为我不会说泰语。
//Find all the ranges of each word
var words: [String] = []
var ranges: [NSRange] = []
//Convert to nsstring first because otherwise you get stuck with Ranges and Strings.
let nstext = backgroundTextField.stringValue as NSString //contains "ยัฟิแก ไฟหก"
words = nstext.componentsSeparatedByString(" ")
var nstextLessWordsWeHaveRangesFor = nstext //if you have two identical words this prevents just getting the first word's range
for word in words
{
let range:NSRange = nstextLessWordsWeHaveRangesFor.rangeOfString(word)
Swift.print(range)
ranges.append(range)
//create a string the same length as word
var fillerString:String = ""
for i in 0..<word.characters.count{
//for var i=0;i<word.characters.count;i += 1{
Swift.print("i: \(i)")
fillerString = fillerString.stringByAppendingString(" ")
}
//remove duplicate words / letters so that we get correct range each time.
if range.length <= nstextLessWordsWeHaveRangesFor.length
{
nstextLessWordsWeHaveRangesFor = nstextLessWordsWeHaveRangesFor.stringByReplacingCharactersInRange(range, withString: fillerString)
}
}
输出:
(0,6)
(5,4)
这些范围是重叠的。
这会导致我在尝试使用 NSLayoutManager.enumerateEnclosingRectsForGlyphRange 时出现问题,因为范围不一致。
我怎样才能获得正确的范围(或者在这种特定情况下,非重叠范围)?
【问题讨论】:
-
你的代码中只有一个打印语句,如何得到两个输出行?
-
这真的是伪代码 - 试图隔离问题。在应用程序中,它循环遍历字符串中的单词。
-
一个可重现的、独立的示例来证明该问题会有所帮助。
-
关于它 - 给我一个莫。
-
@MartinR 我需要知道你的午休时间安排,这样我才有机会获得一些 SO 业力。
标签: swift cocoa nsstring nsrange