Преобразуйте целое число в эквивалентное количество пробелов

Я задавался вопросом, что самый легкий путь состоит в том, чтобы преобразовать целое число в эквивалентное количество пробелов. Мне нужен он для пробелов между узлами при печати дерева двоичного поиска. Я попробовал это

  int position = printNode.getPosition(); 
  String formatter = "%1"+position+"s%2$s\n";
  System.out.format(formatter, "", node.element);

Но я получаю почти в 3 раза больше пробелов по сравнению с международным значением положения. Я не действительно уверен, форматирую ли я строковое право также. Любые предложения были бы большими! Если это делает это более ясным, скажите положение = 6; я хочу 6 пробелов, распечатанных перед моим элементом узла.

15
задан polygenelubricants 14 April 2010 в 08:17
поделиться

5 ответов

Я думаю, вы имели в виду что-то вроде:

    int n = 6;
    String s = String.format("%1$"+n+"s", "");

System.out.format("[%13s]%n", "");  // prints "[             ]" (13 spaces)
System.out.format("[%1$3s]%n", ""); // prints "[   ]" (3 spaces)
16
ответ дан 1 December 2019 в 00:59
поделиться

Это простой, но бессмысленный способ:

 int count = 20;
 String spaces = String.format("%"+count+"s", "");

или заполнить

String spaces = String.format("%20s", "");
8
ответ дан 1 December 2019 в 00:59
поделиться

Вы можете создать char [] желаемой длины, Arrays.fill его пробелами, а затем создать из него String (или просто добавьте к своему собственному StringBuilder и т. д.).

import java.util.Arrays;

int n = 6;
char[] spaces = new char[n];
Arrays.fill(spaces, ' ');
System.out.println(new String(spaces) + "!");
// prints "      !"

Если вы делаете это с множеством возможных значений n , вместо того, чтобы каждый раз создавать и заполнять новый char [n] , вы можете создать только один достаточно длинный строка пробелов и при необходимости возьмите более короткую подстроку .

8
ответ дан 1 December 2019 в 00:59
поделиться

Прямое решение:

int count = 20;

StringBuilder sb = new StringBuilder(count);
for (int i=0; i < count; i++){
 sb.append(" ");
}
String s = sb.toString();

StringBuilder эффективен с точки зрения скорости.

5
ответ дан 1 December 2019 в 00:59
поделиться

Почему бы не перебрать целое число и не добавить пробел на каждой итерации?

String spaces = "";
for (int i = 0 ; i < position ; i++) spaces += " ";

И вы можете использовать StringBuilder вместо String, если позиция может стать очень большой, и производительность будет проблемой.

3
ответ дан 1 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: