我正在开发一个应用程序,它使用一种名为“Tamil”的语言输入。因此,为了找到字符串中任何特定字符的范围,我使用了以下代码。
var range = originalWord.rangeOfString("\(character)")
println("\(range.location)")
所以除了某些情况外,这种方法很好。
有一些像这样的字符 - > í,ó。 //我只是说一个例子。
所以喜欢这种组合,在其他语言中有几个元音变音符号。
如果我有这个词“alv`in”
//这是alvin,但我用方言“v”。 如果我在xcode中打印这些字符的unicde值,我将得到每个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
}
答案 0 :(得分:2)
你应该使用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 ?")
}
}
答案 1 :(得分:0)
查看NSString的rangeOfComposedCharacterSequenceAtIndex:和rangeOfComposedCharacterSequencesForRange的文档:
您想要查找“组合字符序列”,而不是单个字符。