文字列を行に分割する拡張メソッドSplitToLinesです。
拡張メソッドのソースコード
using System; using System.Collections.Generic; using System.Linq; namespace Extensions { static class StringExtensions { /// <summary> /// 文字列を行に分割し、列挙可能にします。 /// </summary> /// <param name="self">System.Stringのインスタンス。</param> /// <param name="options"> /// 空の要素を省略する場合はStringSplitOptions.RemoveEmptyEntries。 /// 空の要素も含める場合はStringSplitOptions.None。</param> /// <returns>分割された行。</returns> /// <remarks> /// 改行コードは、キャリッジリターン、ラインフィード、キャリッジリターン + ラインフィードのどれでもかまいません。 /// </remarks> public static IEnumerable<string> SplitToLines(this string self, StringSplitOptions options) { if (string.IsNullOrEmpty(self)) yield break; string s = self.Replace("\r\n", "\n").Replace('\r', '\n'); foreach (string line in s.Split(new char[] { '\n' }, options)) { yield return line; } } /// <summary> /// 文字列を行に分割し、列挙可能にします。 /// </summary> /// <param name="self">System.Stringのインスタンス。</param> /// <returns>分割された行。</returns> /// <remarks> /// <para>空の要素は省略します。</para> /// <para> /// 改行コードは、キャリッジリターン、ラインフィード、キャリッジリターン + ラインフィードのどれでもかまいません。 /// </para> /// </remarks> public static IEnumerable<string> SplitToLines(this string self) { return self.SplitToLines(StringSplitOptions.RemoveEmptyEntries); } } }
拡張メソッドのテスト
テストに使用する文字列
3種類の改行コードが混在する以下の文字列をファイルで用意します。このファイルを読み込んでテストします。
テストコード
using System; using System.IO; namespace Extensions { class Program { static void Main(string[] args) { string text = File.ReadAllText(@"c:\text.txt"); foreach (string s in text.SplitToLines()) { Console.WriteLine(s); } string nullText = null; foreach (string s in nullText.SplitToLines()) { Console.WriteLine(s); } Console.WriteLine("出力終了"); Console.ReadKey(); } } }
テスト結果