我需要的兩個詞的範圍內的字符串,例如:NSString.rangeOfString返回異常結果與非拉丁字符
ยัฟิแก ไฟหก
(這簡直是我打字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
的道路出現問題。
我怎樣才能得到正確的範圍(或在這種特殊情況下,非重疊範圍)?
在代碼中只有一個打印語句,如何獲得兩個輸出行? –
真的是僞代碼 - 試圖隔離問題。在應用程序中,它循環遍歷字符串中的單詞。 – glenstorey
顯示問題的可重複的自包含示例會很有幫助。 –