C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 64 を表示中)
■36357 / )  Re[3]: エスケープされた文字列の分割
□投稿者/ 魔界の仮面弁士 (1095回)-(2009/05/27(Wed) 21:24:53)
No36329 (いしだ さん) に返信
> ほげ;;;#ほげ
> のような場合、期待するのは、
おぉぅ。私のコード(No36327)も、そのパターンに対応できていませんでした。

ところで、セミコロンの対応が不正な場合はどうするべきでしょうかね。
"あいう;" は例外を投げるべきか、それとも "あいう;;" として扱うべきなのか。


>>> <文字列> に含まれることがあり得ないような
>>> ダミーの文字列を考えなくてはならないところに難を感じています。
原始的に一文字ずつ処理していく方法しか思いつかず…。

public static string[] Split(string fromString)
{
    return new List<string>(Iterator(new StringBuilder(fromString))).ToArray();
}

private static IEnumerable<string> Iterator(StringBuilder fromString)
{
    int max = fromString.Length;
    // fromString.Append(';'); // セミコロン補正を行う場合はコメント解除
    StringBuilder sb = new StringBuilder();
    for (int p = 0; p < max; ++p)
    {
        if (fromString[p] == ';')
        {
            if (fromString[p + 1] == '#')
            {
                yield return sb.ToString();
                ++p;
                sb.Length = 0;
            }
            else
            {
                sb.Append(fromString[p]);
                if (fromString[p + 1] == ';') ++p;
            }
        }
        else
        {
            sb.Append(fromString[p]);
        }
    }
    yield return sb.ToString();
}

返信 編集キー/


管理者用

- Child Tree -