Учитывая строку в Java, просто возьмите первые буквы X

Есть ли что-то вроде подстроки С# для Java? Я создаю мобильное приложение для устройства Blackberry, и из-за ограничений экрана я могу позволить себе показывать только 13 букв плюс три точки для многоточия.

Любое предложение о том, как это сделать?

Мне нужны голые кости Java, а не какой-то причудливый трюк, потому что я сомневаюсь, что мобильное устройство имеет доступ к полной структуре. По крайней мере, по моему опыту работы с Java ME год назад.

Ответ 1

Вы можете сделать то, что хотите, с помощью String.substring().

String str = "please truncate me after 13 characters!";
if (str.length() > 16)
    str = str.substring(0, 13) + "..."

Ответ 2

String foo = someString.substring(0, Math.min(13, someString.length()));

Изменить: Только для общей ссылки, с Guava 16.0 вы можете сделать:

String truncated = Ascii.truncate(string, 16, "...");

для усечения с максимальной длиной 16 символов с помощью многоточия.

Помимо

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

  • Вы можете использовать границы слов и/или пробелы во избежание усечения в неудобном месте.
  • Разделение суррогатных пар (хотя этого можно избежать, просто проверив, является ли символ, который вы хотите усечь, первым из суррогатной пары).
  • Разделение символа и сопровождающего его символа (например, e, за которым следует комбинирующий символ, который помещает акцент на e).
  • Внешний вид персонажа может меняться в зависимости от характера, который следует за ним на определенных языках, поэтому просто усечение этого символа приведет к созданию чего-то, что даже не похоже на оригинал.

По этим причинам (и другим), я понимаю, что наилучшей практикой для усечения для отображения в пользовательском интерфейсе является фактическое исчезновение рендеринга текста в правильной точке на экране, а не обрезание базовой строки.

Ответ 3

Всякий раз, когда есть какая-то операция, которую вы считаете самой распространенной задачей, но Java API требует, чтобы вы проверяли границы, исключали исключения, использовали Math.min() и т.д. (т.е. требуют больше работы, чем вы ожидали), проверьте Apache commons-lang. Он почти всегда присутствует в более сжатом формате. В этом случае вы используете StringUtils#substring, который выполняет обработку ошибок. Вот что говорит javadoc:

Gets a substring from the specified String avoiding exceptions.

A negative start position can be used to start n characters from the end of the String.

A null String will return null. An empty ("") String will return "".

 StringUtils.substring(null, *)   = null
 StringUtils.substring("", *)     = ""
 StringUtils.substring("abc", 0)  = "abc"
 StringUtils.substring("abc", 2)  = "c"
 StringUtils.substring("abc", 4)  = ""
 StringUtils.substring("abc", -2) = "bc"
 StringUtils.substring("abc", -4) = "abc"

Ответ 4

String str = "This is Mobile application."
System.out.println(str.subSequence(0, 13)+"...");