2014-10-09 22 views
0

我正在開發一個應用程序,它以一種名爲「泰米爾語」的語言進行輸入。所以爲了找到字符串中任何特定字符的範圍,我使用了下面的代碼。NSRange中有方言的字符串

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

所以這工作正常,除了一些情況。

有一些這樣的字符 - >í,ó。 //我只是說一個例子。

所以像這樣的組合,在其他語言中有幾個元音符號。

如果我有這個詞「alv`in」

//這是阿爾文,但我用「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

2147483647實際上是MAX_INT - 分配給uint而不是-1的值。也就是說,'originalWord.rangeOfString'返回「未找到」。 – 2014-10-09 15:00:45

+0

@IanMacDonald如果你這樣說,那麼我怎麼才能找到一個帶有方言的字母的range.location。? (對於單個字符有兩個unicode值) – 2014-10-09 15:03:32

+0

您確定要查找的字符是以您提供的方式指定的嗎?使用'characterAtIndex:' ?在循環中單獨輸出字符時會得到什麼結果? – 2014-10-09 15:07:32

回答

2

應使用夫特字符串而非NSString,因爲夫特串具有 完全支持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 ?") 
    } 
} 
+0

- >沒有稱作rangeOfString()的函數。相反,他們是這樣的 - > rangeOfString(字符串,選項,範圍,區域設置)。 – 2014-10-09 15:57:49

+0

@AppleKid:選項,範圍和本地參數都是* optional *。上面的代碼在Xcode 6.0.1中編譯,我檢查了這一點。 – 2014-10-09 16:01:20

+0

>感謝您的時間。我認爲它的工作很好。謝謝。 – 2014-10-09 16:04:29

0

檢查出的NSString的rangeOfComposedCharacterSequenceAtIndex的文檔:你想尋找組合字符序列,而不是單個字符

:和rangeOfComposedCharacterSequencesForRange。

相關問題