将整数转换为等效的空格数

时间:2010-04-14 05:25:24

标签: java string-formatting

我想知道最简单的方法是将整数转换为等效的空格数。打印二叉搜索树时,我需要它用于节点之间的空间。我试过这个

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

但是,与位置的int值相比,我得到的空间几乎是3倍。我不确定我是否正在格式化字符串。 任何建议都会很棒! 如果它更清楚,比如position = 6;我想在节点元素之前打印6个空格。

8 个答案:

答案 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", "");