2017年4月20日木曜日

C#: 文字列を数字とそれ以外で区切る


 ということをやりたかったので、つくってみた。
 こういうのは正規表現とかで使うと柔軟にできるんだろうけど、面倒くさいそこまで高機能なの必用じゃなかったので。
 数字(0-9)の連続を1グループとして、それ以外の部分も1グループとして、分割して返してくれる。数字しか識別しないので、空白で区切りとかはされない。もちろん数字と数字の間に空白があれば区切られるけど。

 いつもの通り、使うときは自己責任で。


static class MyExt
{
    public static string[] SplitIsNumber(this string text)
    {
        if (string.IsNullOrEmpty(text))
        {
            return (new string[0]);
        }

        List<string> list = new List<string>();

        int start = 0;
        bool prev = char.IsNumber(text[start]);

        for (int i = start + 1; i < text.Length; i++)
        {
            bool crnt = char.IsNumber(text[i]);

            if (prev == crnt)
            {
                continue;
            }

            list.Add(text.Substring(start, i - start));
            start = i;
            prev = crnt;
        }

        if (start != text.Length)
        {
            list.Add(text.Substring(start, text.Length - start));
        }

        return (list.ToArray());
    }
}

0 件のコメント:

コメントを投稿