Método ideal para truncar uma string com reticências

Tenho certeza de que todos nós já vimos reticências nos status do Facebook (ou em outro lugar) e clicamos em "Mostrar mais" e existem apenas mais 2 caracteres. Eu acho que isso é por causa da programação lenta, porque certamente existe um método ideal.

A minha conta com caracteres esbeltos[iIl1] como "meio caracteres", mas isso não dá a impressão de que as reticências parecem tolas quando ocultam quase nenhum caractere.

Existe um método ideal? Aqui é minha:

/**
 * Return a string with a maximum length of <code>length</code> characters.
 * If there are more than <code>length</code> characters, then string ends with an ellipsis ("...").
 *
 * @param text
 * @param length
 * @return
 */
public static String ellipsis(final String text, int length)
{
    // The letters [iIl1] are slim enough to only count as half a character.
    length += Math.ceil(text.replaceAll("[^iIl]", "").length() / 2.0d);

    if (text.length() > length)
    {
        return text.substring(0, length - 3) + "...";
    }

    return text;
}

A linguagem realmente não importa, mas marcada como Java, porque é isso que mais me interessa ver.

questionAnswers(12)

yourAnswerToTheQuestion