2010-07-26 70 views
1

我有一個相當不尋常的問題,它正在傷害我的大腦。算法幫助:在文本框中填充文本長度

問題:給定一個已知長度的文本框,並將文本放入其中,通過將空格截取爲「...」以使其適合框內,使文本「合適」。 (背景:這是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

您可以在正確的長度上進行二進制搜索,這意味着您只需嘗試log(n)大小。

哦,也如果文本等寬(每個字符被賦予了EM的寬度),那麼它很容易編程想出解決辦法:

if str.length * emWidth < textBoxWidth 
    tb.text = str 
else 
    tb.text = substring(str, 0, round_down(textBoxWidth/emWidth) - 3) + "..." 
+0

我想檢查文本框和字符串長度的比率首先可以用來找到起點 – Mchl 2010-07-26 20:50:51

+0

謝謝你包括算法'二進制搜索'的名稱。不記得這被稱爲。 – 2010-07-26 21:05:01

1

爲什麼從頭開始?從頭開始,並添加字母(和...),直到它不再適合。 :)

+0

+1。如果這種表現不可忽略,那麼它本身可能是一個GUI WTF,因爲你有一個非常長的文本框。雖然可能不適用於文本區域。 – 2010-07-26 20:49:18

+0

就像一個比較點,如果你有一個50個字符的文本框,我的方式是更快達到約1萬億字符。但代碼更復雜。 – 2010-07-26 20:55:09

+0

因爲一些文本框可以適合大概200個字符的字符串。 – 2010-07-26 20:57:45