Я бы пошел с чем-то похожим на стандартную модель, которая у вас есть.Я бы не стал беспокоиться о ширине символов - как сказал @Gopi, в конце концов, возможно, все будет хорошо.То, что я сделал бы, это ново, это иметь другой параметр, называемый что-то вроде «minNumberOfhiddenCharacters» (возможно, немного менее многословный).Затем, при назначении проверки с использованием многоточия, я сделаю что-то вроде:
if (text.length() > length+minNumberOfhiddenCharacters)
{
return text.substring(0, length - 3) + "...";
}
Это будет означать, что если длина вашего текста равна 35, ваша длина равна 30, а минимальное количество символов, которые нужно скрыть, равно10 тогда вы получите свою строку в полном объеме.Если бы ваше минимальное количество символов, которое нужно скрыть, было 3, то вместо этих трех символов вы бы получили многоточие.
Главное, что нужно знать, это то, что я исказил значение слова «длина», чтобы онобольше не максимальная длина.Длина выводимой строки теперь может составлять от 30 символов (при длине текста> 40) до 40 символов (при длине текста 40 символов).Фактически наша максимальная длина становится length + minNumberOfhiddenCharacters.Конечно, строка может быть короче 30 символов, если исходная строка меньше 30, но это скучный случай, который мы должны игнорировать.
Если вы хотите, чтобы длина была жестким и быстрым максимумом, тогда вы быхотите что-то более похожее на:
if (text.length() > length)
{
if (text.length() - length < minNumberOfhiddenCharacters-3)
{
return text.substring(0, text.length() - minNumberOfhiddenCharacters) + "...";
}
else
{
return text.substring(0, length - 3) + "...";
}
}
Так что в этом примере, если text.length () равно 37, длина равна 30 и minNumberOfhiddenCharacters = 10, мы перейдем ко второй части внутреннего if и получим 27символов + ... чтобы получить 30. Это на самом деле так же, как если бы мы вошли в первую часть цикла (что является признаком того, что у нас правильные граничные условия).Если бы длина текста была 36, мы получили бы 26 символов + многоточие, дающее нам 29 символов со скрытыми 10.
Я спорил, сделает ли перестановка некоторой логики сравнения более интуитивной, но в конце концов решилоставь как есть.Вы можете обнаружить, что text.length() - minNumberOfhiddenCharacters < length-3
делает более очевидным, что вы делаете, хотя.