■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();
}
|