Algorithm 算法帮助:按长度将文本模糊匹配到文本框

Algorithm 算法帮助:按长度将文本模糊匹配到文本框,algorithm,Algorithm,我有一个相当不寻常的问题,它伤害了我的大脑 问题:给定一个已知长度的文本框,以及将放入其中的文本,通过截断文本,使其具有容纳“…”的空间,使其“适合”。(上下文:这是针对ASP.NET C#的,但我认为该算法与语言无关。) 鉴于: // Returns the number of px (as an int) that the arg text is in length public int textLength(String theText, float emSize) 问:最简单、最快的方

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

问题:给定一个已知长度的文本框,以及将放入其中的文本,通过截断文本,使其具有容纳“…”的空间,使其“适合”。(上下文:这是针对ASP.NET C#的,但我认为该算法与语言无关。)

鉴于:

// Returns the number of px (as an int) that the arg text is in length
public int textLength(String theText, float emSize)
问:最简单、最快的方法是什么


我害怕一次删掉一个字符,加上“…”然后检查长度,因为一些要匹配的字符串非常长

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

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

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

if str.length * emWidth < textBoxWidth 
   tb.text = str
else
   tb.text = substring(str, 0, round_down(textBoxWidth / emWidth) - 3) + "..."
如果str.length*emWidth
+1。如果这个性能是不可忽略的,那么它本身可能就是一个GUI WTF,因为您有一个非常长的文本框。但可能不适用于文本区域。作为一个比较点,如果你有一个50字符的文本框,我的方式会更快,最多可达1万亿字符。但代码更复杂。因为一些文本框可以容纳多达200个字符的字符串。从另一个角度来看,要容纳的字符串可能多达900个字符(长度有很多像素!)@Mark Peters是一个上下文旁注,这是为了让字符串在文本框中可见,以便可以打印为预先填写的PDF表单。:)虽然这不是我想要的,但我喜欢它,因为它很简单。我想,首先检查文本框和字符串长度的比率可以用来找到起始点。谢谢你提供了“二进制搜索”算法的名称。不记得这叫什么。
if str.length * emWidth < textBoxWidth 
   tb.text = str
else
   tb.text = substring(str, 0, round_down(textBoxWidth / emWidth) - 3) + "..."