C#で文字列を分割してみた(String.Split編)
Splitメソッドを使って、文字列をある文字で分割してみました。
目次
文字列をSplitする
正規表現でMatchesを使えば分割できますが、もっとお手軽にString.Split()メソッドを使ってみました。 分割に使う仕切り(セパレータ)は、文字でも文字列でも指定できます。
string[] splitted = source.Split(separator_characters, option);
string[] splitted = source.Split(separator_strings, option);
引数 |
型 |
内容 |
---|---|---|
source |
string |
分割される文字列。 |
separator_characters |
char[] |
仕切りの文字(セパレータ)の配列。配列の要素に1文字ずつ指定することで、複数指定できる。 |
separator_strings |
string[] |
仕切りの文字列(セパレータ)の配列。文字の場合と同様に複数指定できる。 |
option |
StringSplitOptions |
セパレータがchar[]の場合は省略可。分割結果の要素が空の場合に、それを戻り値に含めるかどうか指定する。 |
戻り値は、string型の配列です。
文字で分割する
スペースで分割してみました。
using System;
using System.Text;
using System.IO;
namespace split_trial
{
class Program
{
static void Main(string[] args)
{
string source = File.ReadAllText("data.txt", Encoding.GetEncoding("shift_jis")); // データ読み込み。
// 分割する。
char[] separator = new char[] {' '};
string[] splitted = source.Split(separator);
// ここで実行を停止する。
foreach(var s in splitted)
{
Console.WriteLine(s);
}
}
}
}
プログラムの実行を途中で止めて、文字列配列splittedの中身を見てみます。 分割されてそれぞれ配列に格納されてますけど、改行コードが邪魔ですね。 というわけで、キャリッジリターンとラインフィードもセパレータに指定してみます。
using System;
using System.Text;
using System.IO;
namespace split_trial
{
class Program
{
static void Main(string[] args)
{
string source = File.ReadAllText("data.txt", Encoding.GetEncoding("shift_jis"));
// 分割する。
char[] separator = new char[] { ' ', '\r', '\n' };
string[] splitted = source.Split(separator);
// ここで実行を停止する。
foreach(var s in splitted)
{
Console.WriteLine(s);
}
}
}
}
そうすると文字列配列splittedの中身はこのようになります。 使えそうですが、空の要素がなければもっと使い勝手が良さそうです。 ということで、分割のオプションを指定してみます。
using System;
using System.Text;
using System.IO;
namespace split_trial
{
class Program
{
static void Main(string[] args)
{
string source = File.ReadAllText("data.txt", Encoding.GetEncoding("shift_jis"));
// 分割する。
char[] separator = new char[] { ' ', '\r', '\n' };
string[] splitted = source.Split(separator, StringSplitOptions.RemoveEmptyEntries);
// ここで実行を停止する。
foreach(var s in splitted)
{
Console.WriteLine(s);
}
}
}
}
文字列で分割する
まず改行コードで分割してみます。
using System;
using System.Text;
using System.IO;
namespace split_trial
{
class Program
{
static void Main(string[] args)
{
string source = File.ReadAllText("data.txt", Encoding.GetEncoding("shift_jis"));
// 分割する。
string[] separator = new string[] {"\r\n"};
string[] splitted = source.Split(separator, StringSplitOptions.None);
// ここで実行を停止する。
foreach(var s in splitted)
{
Console.WriteLine(s);
}
}
}
}
そうすると文字列配列splittedの中身はこのようになります。 ちゃんと文字列(キャリッジリターン+ラインフィード)で分割されてますね。 元のデータは歌毎に空行で分割していますので、セパレータを2連続の改行コードにしてみます。
using System;
using System.Text;
using System.IO;
namespace split_trial
{
class Program
{
static void Main(string[] args)
{
string source = File.ReadAllText("data.txt", Encoding.GetEncoding("shift_jis"));
// 分割する。
string[] separator = new string[] {"\r\n\r\n"};
string[] splitted = source.Split(separator, StringSplitOptions.None);
// ここで実行を停止する。
foreach(var s in splitted)
{
Console.WriteLine(s);
}
}
}
}
そうすると文字列配列splittedの中身はこのようになります。 最後の要素に改行コードが残ってしまいました。 それならば、セパレータは改行コード1つにして、空要素を無視するようにしてみます。
using System;
using System.Text;
using System.IO;
namespace split_trial
{
class Program
{
static void Main(string[] args)
{
string source = File.ReadAllText("data.txt", Encoding.GetEncoding("shift_jis"));
// 分割する。
string[] separator = new string[] {"\r\n"};
string[] splitted = source.Split(separator, StringSplitOptions.RemoveEmptyEntries);
// ここで実行を停止する。
foreach(var s in splitted)
{
Console.WriteLine(s);
}
}
}
}
そうすると文字列配列splittedの中身はこのようになります。 これなら使い勝手良さそうです。 試した環境は下記です。
Visual Studio 2015 Express for Windows Desktop (C#)
Windows10
公開日
広告