2012/06/15更新

[XCODE] NSStringで複数行の文字列を1行ずつに分解する方法

このエントリーをはてなブックマークに追加            

今日は、サーバーなどから受信した文字列で複数行に分かれている場合に、 それをNSStringを用いて、1行ずつ取り出す方法を書きたいと思います。
ちょっぴりマニアックかも(*´∇`*)

Divide Multi line NSString to each line.



複数行の文字列を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を学んで、今後のフレームワーク設計に生かしていきたいと思う今日このごろです。
最後までお読み頂きましてありがとうございました☆






こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。