Преобразовать целое число в эквивалентное количество пробелов - PullRequest
14 голосов
/ 14 апреля 2010

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

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

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

Ответы [ 7 ]

16 голосов
/ 14 апреля 2010

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

    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)
8 голосов
/ 14 апреля 2010

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

import java.util.Arrays;

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

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

7 голосов
/ 14 апреля 2010

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

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

или заполнено

String spaces = String.format("%20s", "");
5 голосов
/ 14 апреля 2010

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

int count = 20;

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

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

4 голосов
/ 14 апреля 2010

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

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

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

0 голосов
/ 05 декабря 2017

Если кто-то собирался использовать итеративное решение в любом случае, можно было бы сделать это более «Groovy», например:

def spaces=6
print ((1..spaces).collect(" ").join())

Обратите внимание, что это не работает для нулевых пробеловдля этого вам может понадобиться что-то вроде:

print (spaces?(1..spaces).collect(" ").join():"")
0 голосов
/ 27 февраля 2015

Вот пример:

public class NestedLoop {
public static void main (String [] args) {
  int userNum  = 0;
  int i = 0;
  int j = 0;


  while (i<=userNum) {
     System.out.println(i);
     ++i;
     if (i<=userNum) {
     for (j=0;j<i;j++) {
        System.out.print(" ");  
     }
    } 
   }
  return;
  }
}

Если мы сделаем userNum = 3, результат будет:

0
 1
  2
   3

Надеюсь, это поможет!

...