2015-11-20 67 views
6

我試圖從NSString獲取單個字符,如「ઐતિહાસિક」,「પ્રકાશન」,「ક્રોધ」。我想要輸出像1)ઐ,તિ,હા,સિ,ક2)પ્ર,કા,શ,ન3)ક્રો,ધ,但輸出如下1)ઐ,ત,િ,હ,િ ,ક2)પ,્,ર,ક,ા,શ,ન3)ક,્,ર,ો,ધ如何從ios中的字符串中獲取單個字符作爲Gujrati語言(其他語言)

我用這樣的代碼如下:

NSMutableArray *array = [[NSMutableArray alloc]init]; 

    for (int i=0; i<strElement.length; i++) 
    { 
       NSString *str = [strElement substringWithRange:NSMakeRange(i, 1)]; 
       [array addObject:str]; 

    } 
    NSLog(@"%@",array); 

讓我們strElement作爲「ક્રોધ」然後我得到的輸出喜歡這個ક , ્ , ર , ો , ધ 但我需要這樣的ક્રો,ધ

輸出

有什麼辦法,我可以得到需要的結果?任何可直接在iOS中使用的方法,或者需要由我自己創建它的任何方法或想法如何創建它?

任何幫助理解

回答

6

您的代碼假定字符串中的每個字符是一個單一unichar值。但事實並非如此。某些Unicode字符由多個unichar值組成。

的解決方案是使用rangeOfComposedCharacterSequenceAtIndex:代替substringWithRange:具有1

NSString *strElement = @"ઐતિહાસિક પ્રકાશન ક્રોધ"; 
NSMutableArray *array = [[NSMutableArray alloc]init]; 

NSInteger i = 0; 
while (i < strElement.length) { 
    NSRange range = [strElement rangeOfComposedCharacterSequenceAtIndex:i]; 
    NSString *str = [strElement substringWithRange:range]; 
    [array addObject:str]; 
    i = range.location + range.length; 
} 

// Log the results. Build the results into a mutable string to avoid 
// the ugly Unicode escapes shown by simply logging the array. 
NSMutableString *res = [NSMutableString string]; 
for (NSString *str in array) { 
    if (res.length) { 
     [res appendString:@", "]; 
    } 
    [res appendString:str]; 
} 
NSLog(@"Results: %@", res); 

此輸出一個固定的範圍長度:

結果:ઐ,તિ,હા,સિ,ક, પ્ર,કા,શ,ન,,ક્રો,ધ

+0

謝謝@rmaddy這項工作像一個魅力 –