代码之家  ›  专栏  ›  技术社区  ›  rlb.usa

算法帮助:根据文本框的长度调整文本Blurb

  •  1
  • rlb.usa  · 技术社区  · 15 年前

    我有一个相当不寻常的问题,它伤害了我的大脑。

    问题:给定一个已知长度的文本框,以及将进入该文本框的文本,通过截断文本以留出“…”空间使其适合该文本框。(上下文:这是针对ASP.NET C,但我认为该算法不支持语言。)

    Example : [_________]
    Text :     The big brown dog jumped over the red fence.
    Solution :[The bi...]
    
    Example : [_________]
    Text :     Ferret
    Solution :[Ferret___]
    

    鉴于:

    // Returns the number of px (as an int) that the arg text is in length
    public int textLength(String theText, float emSize)
    

    问题:最简单和最快的方法是什么?

    我不敢这样做,一次砍下一个字符,添加“…”,然后检查长度,因为一些要匹配的字符串非常长。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Mark Peters    15 年前

    您可以对正确的长度进行二进制搜索,这意味着您只需尝试日志(n)大小。

    哦,同样,如果文本是单空间的(每个字符都有一个em的宽度),那么很容易通过编程来解决这个问题:

    if str.length * emWidth < textBoxWidth 
       tb.text = str
    else
       tb.text = substring(str, 0, round_down(textBoxWidth / emWidth) - 3) + "..."
    
        2
  •  1
  •   Mchl    15 年前

    为什么要从头开始?从一开始,添加字母(和…)直到它不再适合。:)