【发布时间】:2014-03-13 03:23:04
【问题描述】:
如果可能的话,我想将一个字符串分成指定最大长度的行,而不拆分任何单词(如果有一个单词超过了最大行长度,则必须对其进行拆分)。
与往常一样,我非常清楚字符串是不可变的,最好使用 StringBuilder 类。我已经看到将字符串拆分为单词然后使用 StringBuilder 类构建行的示例,但下面的代码对我来说似乎“更整洁”。
我在描述中提到了“最好”而不是“最有效”,因为我也对代码的“雄辩”感兴趣。字符串永远不会很大,通常分为 2 或 3 行,并且不会发生数千行。
下面的代码真的很糟糕吗?
private static IEnumerable<string> SplitToLines(string stringToSplit, int maximumLineLength)
{
stringToSplit = stringToSplit.Trim();
var lines = new List<string>();
while (stringToSplit.Length > 0)
{
if (stringToSplit.Length <= maximumLineLength)
{
lines.Add(stringToSplit);
break;
}
var indexOfLastSpaceInLine = stringToSplit.Substring(0, maximumLineLength).LastIndexOf(' ');
lines.Add(stringToSplit.Substring(0, indexOfLastSpaceInLine >= 0 ? indexOfLastSpaceInLine : maximumLineLength).Trim());
stringToSplit = stringToSplit.Substring(indexOfLastSpaceInLine >= 0 ? indexOfLastSpaceInLine + 1 : maximumLineLength);
}
return lines.ToArray();
}
【问题讨论】:
标签: c# string split stringbuilder