我有以下代码(继承!),它会将一行文本拆分成2行,并带有html换行符<br/>
。
public static string BreakLineIntoTwo(this HtmlHelper helper, string input)
{
if (string.IsNullOrEmpty(input)) return string.Empty;
if (input.Length < 12) return input;
int pos = input.Length / 2;
while ((pos < input.Length) && (input[pos] != ' '))
pos++;
if (pos >= input.Length) return input;
return input.Substring(0, pos) + "<br/>" + input.Substring(pos + 1);
}
规则似乎是如果文本行少于12个字符,则返回它。如果找不到文本的中间部分并移动到下一个空格并插入换行符。我们还可以假设末尾没有双重空格且没有额外的空格,文本不仅仅是一长串的字母abcdefghijkilmnopqrstuvwxyz
等。
这似乎工作正常,我的问题是Is there a more elegant approach to this problem?
答案 0 :(得分:2)
您可以使用IndexOf
而不是自己循环播放字符串。
public static string BreakLineIntoTwo(this HtmlHelper helper, string input)
{
if (string.IsNullOrEmpty(input)) return string.Empty;
if (input.Length < 12) return input;
int pos = input.Length / 2;
pos = input.IndexOf(' ', pos);
return input.Substring(0, pos) + "<br/>" + input.Substring(pos + 1);
}
答案 1 :(得分:1)
可能的改进将是
private const MinimumLengthForBreak = 12;
private const LineBreakString = "<br />";
public static string BreakLineIntoTwo(this HtmlHelper helper, string input)
{
if (string.IsNullOrEmpty(input)) return string.Empty;
if (input.Length < MinimumLengthForBreak ) return input;
int pos = input.IndexOf(' ', input.Length / 2);
if (pos < 0) return input; // No space found, not checked in original code
return input.Substring(0, pos) + LineBreakString + input.Substring(pos + 1);
}
注意:由于我在工作并且无法检查atm,因此未检查语法。
答案 2 :(得分:1)
答案 3 :(得分:1)
使用'IndexOf'和'Insert'的缩短版本:
private string BreakLineIntoTwo(string input)
{
if (string.IsNullOrEmpty(input)) return string.Empty;
if (input.Length < 12) return input;
int index = input.IndexOf(" ", input.Length/2);
return index > 0 ? input.Insert(index, "<br />") : input;
}
我这是一个单独的方法,但您应该可以轻松地将其更改为您的扩展方法。