Справка по алгоритму: подгоните текстовое поле к его текстовому полю по длине - PullRequest
1 голос
/ 27 июля 2010

У меня довольно необычная проблема, и у меня болит мозг.

Проблема: учитывая текстовое поле известной длины и текст, который будет внутри него, сделайте текст «умещающимся», обрезав его с местом для «...», чтобы уместить его внутри поля. (Контекст: это для 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 ]

2 голосов
/ 27 июля 2010

Вместо этого вы можете выполнить бинарный поиск на правильной длине, а это значит, что вам нужно только попробовать log (n) размеров.

О, также, если текст моноширинный (каждый символ имеет ширину em), это довольно легко понять программно:

if str.length * emWidth < textBoxWidth 
   tb.text = str
else
   tb.text = substring(str, 0, round_down(textBoxWidth / emWidth) - 3) + "..."
1 голос
/ 27 июля 2010

Зачем начинать с конца?Начните с начала и добавляйте буквы (и ...), пока они больше не помещаются.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...