我想知道最简单的方法是将整数转换为等效的空格数。打印二叉搜索树时,我需要它用于节点之间的空间。我试过这个
int position = printNode.getPosition();
String formatter = "%1"+position+"s%2$s\n";
System.out.format(formatter, "", node.element);
但是,与位置的int值相比,我得到的空间几乎是3倍。我不确定我是否正在格式化字符串。 任何建议都会很棒! 如果它更清楚,比如position = 6;我想在节点元素之前打印6个空格。
答案 0 :(得分:16)
我认为你的意思是:
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)
答案 1 :(得分:8)
您可以使用空格创建所需长度的char[]
,Arrays.fill
,然后在其中创建String
(或仅append
到您自己的StringBuilder
{1}}等。)
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
{{1}} 1}}根据需要。
答案 2 :(得分:7)
这是一种简单而又垃圾的方式:
int count = 20;
String spaces = String.format("%"+count+"s", "");
或填写
String spaces = String.format("%20s", "");
答案 3 :(得分:5)
直接解决方案:
int count = 20;
StringBuilder sb = new StringBuilder(count);
for (int i=0; i < count; i++){
sb.append(" ");
}
String s = sb.toString();
StringBuilder在速度方面非常有效。
答案 4 :(得分:4)
为什么不循环遍历整数并在每次迭代时添加一个空格?
String spaces = "";
for (int i = 0 ; i < position ; i++) spaces += " ";
如果StringBuilder
可能变得非常大并且性能问题,那么您可以使用position
而不是字符串。
答案 5 :(得分:0)
以下是一个例子:
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
希望它会有所帮助!
答案 6 :(得分:0)
如果有人打算使用迭代解决方案,那么人们可能想要做更多的事情&#34; Groovy&#34;方式,如:
def spaces=6
print ((1..spaces).collect(" ").join())
请注意,这不适用于零空间。为此你可能想要更像的东西:
print (spaces?(1..spaces).collect(" ").join():"")
答案 7 :(得分:0)
//这将根据变量n中的数字打印空格。因此,在这种情况下,它将打印15个空格。
int n=15;
System.out.format("%1$"+n+"s", "");