gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 13:20:34 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com