Вставьте пробел в строку - PullRequest
5 голосов
/ 22 июня 2011

Довольно базовая проблема, но ее трудно принять в приемлемой форме:

Я хочу преобразовать строку, вставляя отступы каждые 3 пробела, например

"123456789" -> "123 456 789"

"abcdefgh" -> "abc def gh"

Мой код в настоящее время

public String toSpaceSeparatedString(String s) {
  if (s == null || s.length() < 3) {
    return s;
  }

  StringBuilder builder = new StringBuilder();
  int i; 
  for (i = 0; i < s.length()-3; i += 3) {
    builder.append(s.substring(i, i+3));
    builder.append(" ");
  }

  builder.append(s.substring(i, s.length()));

  return builder.toString();
}

Кто-нибудь может предложить более элегантное решение?

Ответы [ 4 ]

10 голосов
/ 22 июня 2011

Вы можете сделать это, используя регулярное выражение:

"abcdefgh".replaceAll(".{3}", "$0 ")
3 голосов
/ 22 июня 2011

Вы можете использовать printf или String.format примерно так:

 builder.append(String.format("%4s", threeDigitString));

Дополнительная информация о форматированном выводе / строках в API .

1 голос
/ 06 ноября 2012

Лучше выглядит replaceAll, но если учесть число, подобное 12345, оно будет преобразовано в 123 45. Но в цифрах, я считаю, должно быть 12 345

1 голос
/ 22 июня 2011

Это не ставит пробел, если там уже есть:

"abcdef gh".replaceAll("\\s*(..[^ ])\\s*", "$1 "); // --> "abc def gh"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...