Help us understand the problem. What is going on with this article?

NSStringの行分割の落とし穴

More than 5 years have passed since last update.

NSStringを行分割したい。割とある気がします。
手っ取り早く回答が欲しい方は一番下へどうぞ。

しかしこの改行コードはくせ者であり、なかなか面倒な面がある。

まず最初に考えるのは

NSArray *lines = [string componentsSeparatedByString:@"\n"];

だが当然これはまずい。
なぜなら改行コードは一つではないからだ。
ではこれではどうだろうか

NSArray *lines = [string componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@"\r\n"]];

またもっとしっかりと書いて、

NSArray *lines = [string componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];

一見すると良さそうに見えるが、これでも良くない。
なぜなら、@"aaa\r\nbbb" などといった文字列がくると、
どうも @"aaa", @"", @"bbb"と3つに分割してしまうのだ。

じゃあ@""のは除外しちゃおう!
というのは非常によくない。
なぜなら除外すると、単なる改行だけの行もなかったことにされてしまうからだ。

するともはや自分で1文字1文字パースしていくしかないんじゃないかとすら思えてくる。

しかし、アップルのドキュメントはしっかり読むべきである。
ずばりなメソッドをつかうのが正解のようだ。

NSMutableArray *lines = [NSMutableArray array];
[string enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) {
                [lines addObject:line];
            }];

もし行の途中でやめたくなったら *stop = YES; とポインタを通して通知すればいい。
これでめでたく解決である。

Ushio
ソフトウェアとチノちゃんが好き。あと光輸送を計算するのも好き
https://github.com/Ushio
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした