我正在开发一个应用程序,它接受一种名为“泰米尔语”的语言的输入。因此,为了找到字符串中任何特定字符的范围,我使用了以下代码。
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
}
khác
{
// 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
}
khác
{
// same character but in the different index
// Wrong value increase by one (bull Value)
bullValue += 1
}
你应该使用 Swift 字符串而不是 NSString
,因为 Swift 字符串有完整的 Unicode 支持,包括组合字符序列、(扩展的)字形簇等。
对于 Swift 字符串,rangeOfString()
返回一个可选的 Range
处理起来有点复杂。您也可以使用 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
} khác {
// At a different position
bullValue += 1
}
} khác {
// 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
} khác {
// At a different position
bullValue += 1
}
} khác {
// Character not found in string
}
mặc định:
println("What ?")
}
}
Tôi là một lập trình viên xuất sắc, rất giỏi!