ios - 具有方言的字符串中的 NSRange

标签 ios objective-c xcode unicode swift

我正在开发一个应用程序,它接受一种名为“泰米尔语”的语言的输入。因此,为了找到字符串中任何特定字符的范围,我使用了以下代码。

var range = originalWord.rangeOfString("\(character)")
println("\(range.location)")

所以除了某些情况外,这工作正常。

有一些像这样的字符 -> í , ó 。//我只是在说一个例子。

所以像这个组合,在其他语言中有几个元音变音符号。

如果我有这个词“alv`in”

//这是 alvin ,但我用了方言中的“v”。 如果我在 xcode 中打印这些字符的 unicode 值,我将获得每个 unicode。但是对于“v`”,将有两个 unicode 值,但它被视为单个字符。

所以如果我在上面提到的代码中检查这个字符。我得到以下结果。这会导致我的程序出错。

range.location//2147483647 ,它不是一个数字。?为什么。?

但对于其他字符,它只会打印正确的 Int 值。//像“3”这样的单个数字

有人知道如何完成这项工作吗?如果我使用带方言的字符,我该如何实现这一点

.?

代码如下

// userInput = "இல்லம்"

var originalWord : NSString = ("இல்லம்")

   var originalArray = Array("இல்லம்")

        var userInputWord = Array(String(userInput))



       // -------------------------------------------

        for character in String(userInput)
        {
            switch character
            {

            case originalArray[0] :

                // here matches first character of the userinput to the original word first character

                // the character exists at the 0th index


                var range = originalWord.rangeOfString("\(character)")


                if range.location == 0
                {
                     // same character in the same index
                    // correctValue increase by one (cow Value)

                    cowValue += 1

                }
                else
                {
                    // same character but in the different index 
                    // Wrong value increase by one (bull Value)

                    bullValue += 1
                }


            case originalArray[1] :

                // here matches first character of the userinput to the original word first character

                // the character exists at the 1th index


                var range = originalWord.rangeOfString("\(character)")

                println("\(range.location)") // here i get he long Int Value instead of single digit


                if range.location == 1
                {
                    // same character in the same index
                    // correctValue increase by one (cow Value)

                    cowValue += 1

                }
                else
                {
                    // same character but in the different index
                    // Wrong value increase by one (bull Value)

                    bullValue += 1
                }

最佳答案

你应该使用 Swift 字符串而不是 NSString ,因为 Swift 字符串有 完整的 Unicode 支持,包括组合字符序列、(扩展的)字形簇等。

对于 Swift 字符串,rangeOfString()返回一个可选的 Range<String.Index> 处理起来有点复杂。您也可以使用 find()而不是 找到一个角色的位置。这可能有助于作为一个起点:

var cowValue = 0
var bullValue = 0

let userInput = "இல்லம்"
let originalWord = "இல்லம்"
let originalArray = Array("இல்லம்")

for character in userInput {
    switch character {
    case originalArray[0] :
        if let pos = find(originalWord, character) {
            // Character found in string
            println(pos)
            if pos == originalWord.startIndex {
                // At position 0
                cowValue += 1
            } else {
                // At a different position
                bullValue += 1
            }
        } else {
            // Character not found in string
        }

    case originalArray[1] :
        if let pos = find(originalWord, character) {
            // Character found in string
            println(pos)
            if pos == advance(originalWord.startIndex, 1) {
                // At position 1
                cowValue += 1
            } else {
                // At a different position
                bullValue += 1
            }
        } else {
            // Character not found in string
        }
    default:
        println("What ?")
    }
}

关于ios - 具有方言的字符串中的 NSRange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26281519/

相关文章:

iOS Kobold Kit 如何禁用屏幕调试 (gpu : renderer: . ..etc)?

ios - 使用 Swift 以编程方式启用和禁用自动旋转?

iphone - NSArray 是否为 :lastObject return an autoreleased object?

ios - 如何调试 iOS 9 扩展

iphone - UIScrollView如何自动包裹内容?

ios - xcode/swift 中类名的错误?

ios - 对于 ScrollView 中的 uibuttons,循环忽略 isKindOfClass

ios - iOS 中 ArrayList 的替代品?

ios - 如果设备支持 Touch ID

xcode - 在 Storyboard OSX 应用程序中设置 initialFirstResponder