Автоматически эллипсизировать строку в Java - PullRequest
4 голосов
/ 20 июля 2010

Есть ли в Java метод автоматического увеличения строки по эллипсу?Просто в Java, а не в других библиотеках.

Спасибо.

Ответы [ 5 ]

7 голосов
/ 20 июля 2010

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

/**
 * Puts ellipses in input strings that are longer than than maxCharacters. Shorter strings or
 * null is returned unchanged.
 * @param input the input string that may be subjected to shortening
 * @param maxCharacters the maximum characters that are acceptable for the unshortended string. Must be at least 3, otherwise a string with ellipses is too long already.
 * @param charactersAfterEllipsis the number of characters that should appear after the ellipsis (0 or larger) 
 * @return the truncated string with trailing ellipses
 */
public static String ellipsize(String input, int maxCharacters, int charactersAfterEllipsis) {
  if(maxCharacters < 3) {
    throw new IllegalArgumentException("maxCharacters must be at least 3 because the ellipsis already take up 3 characters");
  }
  if(maxCharacters - 3 > charactersAfterEllipsis) {
    throw new IllegalArgumentException("charactersAfterEllipsis must be less than maxCharacters");
  }
  if (input == null || input.length() < maxCharacters) {
    return input;
  }
  return input.substring(0, maxCharacters - 3 - charactersAfterEllipsis) + "..." + input.substring(input.length() - charactersAfterEllipsis);
}

Существуют также более сложные функции, которые могут вам понадобиться в алгоритме многоточия: если вам нужно поместить текст в графический элемент, и вы используете пропорциональный шрифт, то вы должны измерить длину строки.

Для Swing / AWT это будет java.awt.Font.getStringBounds. В таком случае простой алгоритм вырезал бы строку по одной букве за раз и добавлял многоточие, пока строка не вписывается в заданный предел. При частом использовании метод деления пополам, разработанный в http://www.codeproject.com/KB/cs/AutoEllipsis.aspx?msg=3278640 (C #, но должен быть достаточно простым для перевода на Java), может сэкономить некоторые циклы процессора.

5 голосов
/ 20 июля 2010

Этот метод возвратит строку с эллиптическим размером:

String ellipsize(String input, int maxLength) {
    String ellip = "...";
    if (input == null || input.length() <= maxLength 
           || input.length() < ellip.length()) {
        return input;
    }
    return input.substring(0, maxLength - ellip.length()).concat(ellip);
}
3 голосов
/ 01 марта 2016

Онлайнер, который, конечно, не превосходит другие предлагаемые решения:

longString.replaceFirst("(.{5}).+(.{5})", "$1...$2")

Оставит только первые и последние 5 символов и поставит ... посередине.

3 голосов
/ 20 июля 2010

Там нет.Но вот еще один недостаток простого способа сделать это.

String ellipsize(String input, int maxLength) {
  if (input == null || input.length() < maxLength) {
    return input;
  }
  return input.substring(0, maxLength) + "...";
}
1 голос
/ 20 июля 2010

Конечно, попробуйте это:

public static String ellipsise (String input, int maxLen) {
    if (input == null)
        return null;
    if ((input.length() < maxLen) || (maxLen < 3))
        return input;
    return input.substring (0, maxLen - 3) + "...";
}

Это имеет преимущество в исправлении ошибки, когда английский язык короля используется неправильно:

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