Преобразование целого числа в эквивалентное число пробелов
Мне было интересно, что самым простым способом является преобразование целого числа в эквивалентное число пробелов. Мне нужно это для промежутков между узлами при печати двоичного дерева поиска. Я попробовал это
int position = printNode.getPosition();
String formatter = "%1"+position+"s%2$s\n";
System.out.format(formatter, "", node.element);
Но я получаю почти в 3 раза больше пробелов по сравнению со значением int. Я не уверен, правильно ли форматирую строку.
Любые предложения были бы замечательными!
Если это станет более ясным, скажем, позиция = 6; Я хочу 6 пробелов, напечатанных перед моим элементом node.
Ответы
Ответ 1
Я думаю, вы имели в виду что-то вроде:
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)
Ответ 2
Вы можете создать 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
.
Ответ 3
Это простой, но мусор, способ:
int count = 20;
String spaces = String.format("%"+count+"s", "");
или заполняется
String spaces = String.format("%20s", "");
Ответ 4
Почему бы не перебрать целое число и не добавить пробел на каждой итерации?
String spaces = "";
for (int i = 0 ; i < position ; i++) spaces += " ";
И вы можете использовать StringBuilder
вместо String, если position
может стать очень большим, а производительность - проблема.
Ответ 5
Прямое решение:
int count = 20;
StringBuilder sb = new StringBuilder(count);
for (int i=0; i < count; i++){
sb.append(" ");
}
String s = sb.toString();
StringBuilder эффективен с точки зрения скорости.
Ответ 6
Вот пример:
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
Надеюсь, что это поможет!
Ответ 7
Если бы кто-то собирался использовать итерационное решение, можно было бы сделать это более "Groovy", например:
def spaces=6
print ((1..spaces).collect(" ").join())
Обратите внимание, что это не работает для нулевых пробелов. для этого вам может понадобиться нечто большее:
print (spaces?(1..spaces).collect(" ").join():"")