在c#中使用<br/>分割一行文本为两行

时间:2010-11-10 10:07:14

标签: c#

我有以下代码(继承!),它会将一行文本拆分成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?

4 个答案:

答案 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)

为什么不使用自动换行的css属性。

使用自动换行属性,您可以通过指定break-word强制将长文本换行换行。

选中此example

最诚挚的问候
迈拉

答案 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;
    }

我这是一个单独的方法,但您应该可以轻松地将其更改为您的扩展方法。