web-dev-qa-db-ja.com

NSStringから単一のNSString文字を取得する方法

NSString内のどこかからキャラクターを取得したいです。結果をNSStringにしたいです。

これは、インデックスitで単一の文字を取得するために使用するコードです。

[[s substringToIndex:i] substringToIndex:1]

それを行うためのより良い方法はありますか?

68
node ninja

これにより、インデックスiの文字がNSStringとして取得され、追加のNSStringではなくNSRange構造体のみを使用しています。

NSString * newString = [s substringWithRange:NSMakeRange(i, 1)];
130
Kris Markel

NSStringから1つの文字を取得したいだけなら、これを試すことができます。

- (unichar)characterAtIndex:(NSUInteger)index;

次のように使用します:

NSString *originalString = @"hello";
int index = 2;
NSString *theCharacter = [NSString stringWithFormat:@"%c", [originalString characterAtIndex:index-1]];
//returns "e".
38
joshualmf

あなたの提案は、ASCIIのような単純な文字に対してのみ有効です。 NSStringsはUnicodeを保存します。キャラクターが数文字の長さの場合、意味がわからなくなる可能性があります。つかいます

- (NSRange)rangeOfComposedCharacterSequenceAtIndex:(NSUInteger)index;

あなたのキャラクターがいくつのユニチャーを持っているかを決定したい場合。これを使用して、文字列をステップ実行して、文字の境界がどこで発生するかを判断します。

完全にユニコード対応にするのは少し手間がかかりますが、使用する言語によって異なります。アジアのテキストがたくさんあるので、ほとんどの文字が1つのスペースから溢れているので、やらなければならない仕事です。

23
NSMutableString *myString=[NSMutableString stringWithFormat:@"Malayalam"];
NSMutableString *revString=@"";

for (int i=0; i<myString.length; i++) {
    revString=[NSMutableString stringWithFormat:@"%c%@",[myString characterAtIndex:i],revString];
}
NSLog(@"%@",revString);
0
Neeraj Jerauld