Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to get single characters from string in ios for Gujrati language(other language)

I am trying to get single characters from NSString, like "ઐતિહાસિક","પ્રકાશન","ક્રોધ". I want output like 1)ઐ,તિ,હા,સિ,ક 2) પ્ર,કા,શ,ન 3) ક્રો,ધ, but output is coming like this 1)ઐ , ત , િ , હ , િ , ક 2) પ , ્ , ર , ક , ા , શ , ન 3)ક , ્ , ર , ો , ધ

I have used code like below:

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);

Let's take strElement as "ક્રોધ" then I got output like this ક , ્ , ર , ો , ધ But I need output like this ક્રો,ધ

Is there any way that I can get the desired output? Any method available directly in iOS or need to create it by my self then any way or idea how to create it?

Any help is appreciated

like image 363
Parth Bhadaja Avatar asked Nov 20 '15 05:11

Parth Bhadaja


1 Answers

Your code is assuming that each character in the string is a single unichar value. But it is not. Some of the Unicode characters are composed of multiple unichar values.

The solution is to use rangeOfComposedCharacterSequenceAtIndex: instead of substringWithRange: with a fixed range length of 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);

This outputs:

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

like image 89
rmaddy Avatar answered Nov 06 '22 16:11

rmaddy