- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我需要获取字符串中两个单词的范围,例如:
ยัฟิแก ไฟหก
(这实际上是我在输入 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
时出现问题,因为范围不一致。
如何获得正确的范围(或者在这种特定情况下,不重叠的范围)?
最佳答案
Swift String
字符描述“扩展字素簇”,而 NSString
使用 UTF-16 代码点,因此字符串的长度不同取决于您使用的表示方式。
比如第一个字符"ยั"
其实就是组合"ย"
(U+0E22) 的变音标记 "ั"
(U+0E31)。这算作一个 String
字符,但算作两个 NSString
字符。因此,当您将单词替换为空格。
最简单的解决方案是坚持使用一个,String
或 NSString
(如果可能的话)。由于您正在使用 NSString
,因此更改
for i in 0..<word.characters.count {
到
for i in 0..<range.length {
应该可以解决问题。填充字符串的创建可以简化为
//create a string the same length as word
let fillerString = String(count: range.length, repeatedValue: Character(" "))
关于swift - NSString.rangeOfString 返回带有非拉丁字符的异常结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39355552/
我对UDF pig 拉丁有问题。 我正在尝试实现一个系统,该系统必须验证本地存储的矩阵与hadoop存储库中存储的一组矩阵之间是否存在“映射”。 对于映射,我的意思是在hadoop中是否存在一个存储矩
数据库的排序规则用法是什么?好吧,对于 HTML UTF-8,我知道一点,比如显示其他语言类型。但是对于数据库呢?我正在使用 latin-1(默认),我的 friend 告诉我改用 UTF。当我问为什
我有以下带有架构的数据 (t0: chararray,t1: int,t2: int) (B,4,2) (A,2,3) (A,3,2) (B,2,2) (A,1,2) (B,1,2) 我想生成以下结果
我正在尝试构建 AOSP 拉丁 IME(源代码:https://android.googlesource.com/platform/packages/inputmethods/LatinIME/+/m
我正在实现过滤器功能。我使用以下方法定义字符串是否适合查询: someString.IndexOf(someSearch, StringComparison.OrdinalIgnoreCase) >=
我是一名优秀的程序员,十分优秀!