[XCODE] NSStringで複数行の文字列を1行ずつに分解する方法
今日は、サーバーなどから受信した文字列で複数行に分かれている場合に、
それをNSStringを用いて、1行ずつ取り出す方法を書きたいと思います。
ちょっぴりマニアックかも(*´∇`*)
引数に文字列全体を示すRangeを渡せば、文字列最初から最初の改行コードまでを含むRangeを返却 してくれます。
以下が利用例となります。
上記で1行ずつ取得する事が出来ます。
注意点は、APIにも記載されていますが、取得できる1行の最後の文字に改行コードを含まれる点です。
改行コードが不要な場合には、Rangeの長さを1つ減らすなど、適切に対処する必要があります。
NSString Class Reference
Cocoaフレームワークは、使う度にスゴく便利だなぁと感じる機会が多いように感じます。
利用しながら色々と外部APIを学んで、今後のフレームワーク設計に生かしていきたいと思う今日このごろです。
最後までお読み頂きましてありがとうございました☆
ちょっぴりマニアックかも(*´∇`*)
複数行の文字列を1行ずつに分解する方法
1行ずつに分解するには、NSStringの以下メソッドを利用します。- (NSRange)lineRangeForRange:(NSRange)aRangeこのメソッドは、引数で渡した範囲内で、改行コードを発見したら、その部分までのRangeを返却 してくれるメソッドです。
引数に文字列全体を示すRangeを渡せば、文字列最初から最初の改行コードまでを含むRangeを返却 してくれます。
以下が利用例となります。
// 複数行を保持するNSStringオブジェクト // \nのところで改行されています NSString *multiLineString = @"aaaaaaaaa\nbbbbbbbb\ncccccccc"; NSString *line; NSRange range, subRange; // 最初に文字列全範囲を示すRangeを作成する range = NSMakeRange(0, multiLineString.length); // 1行ずつ読み出す while (range.length > 0) { // 1行分を示すRangeを取得します。 subRange = [multiLineString lineRangeForRange:NSMakeRange(range.location, 0)]; // 1行分を示すRangeを用いて、文字列から1行抜き出す line = [multiLineString substringWithRange:subRange]; NSLog(@"line = %@", line); // 1行分を示すRangeの最終位置を、 // 次の探索に使うRangeの最初として設定する range.location = NSMaxRange(subRange); // 文字列の終端を、次の探索に使うRangeの最終位置に登録します range.length -= subRange.length; }
上記で1行ずつ取得する事が出来ます。
注意点は、APIにも記載されていますが、取得できる1行の最後の文字に改行コードを含まれる点です。
改行コードが不要な場合には、Rangeの長さを1つ減らすなど、適切に対処する必要があります。
参考資料
今回は、以下のAPIリファレンスを参照しました。ありがとうございます!!NSString Class Reference
最後に
また一つ便利な機能を知る事が出来て良かったです(*´∇`*)Cocoaフレームワークは、使う度にスゴく便利だなぁと感じる機会が多いように感じます。
利用しながら色々と外部APIを学んで、今後のフレームワーク設計に生かしていきたいと思う今日このごろです。
最後までお読み頂きましてありがとうございました☆