代码之家  ›  专栏  ›  技术社区  ›  Rippo

使用c中的a<br>将一行文本拆分为两行#

c#
  •  0
  • Rippo  · 技术社区  · 14 年前

    <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 回复  |  直到 14 年前
        1
  •  1
  •   Morfildur    14 年前

    可能的改进是

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

    注意:语法没有检查,因为我在工作,不能检查自动柜员机。

        2
  •  2
  •   Aamir    14 年前

    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);
    }
    
        3
  •  1
  •   Myra    14 年前

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

    使用换行符属性,可以通过指定换行符强制长文本换行。

    检查这个 example

    致意

        4
  •  1
  •   Mikael    14 年前

    使用“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;
        }