Учитывая строку в Java, просто возьмите первые буквы X - PullRequest
28 голосов
/ 07 октября 2010

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

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

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

Ответы [ 4 ]

52 голосов
/ 07 октября 2010

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

String str = "please truncate me after 13 characters!";
if (str.length() > 16)
    str = str.substring(0, 13) + "..."
36 голосов
/ 07 октября 2010
String foo = someString.substring(0, Math.min(13, someString.length()));

Редактировать: Просто для общего ознакомления, с Guava 16.0 вы можете сделать:

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

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

В сторону

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

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

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

4 голосов
/ 07 октября 2010

Всякий раз, когда есть какая-то операция, которая, по вашему мнению, является очень распространенной, но 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"
0 голосов
/ 12 марта 2013
String str = "This is Mobile application."
System.out.println(str.subSequence(0, 13)+"...");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...