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

mik*_*ike 15 java string-formatting

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

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

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

Eya*_*der 16

我认为你的意思是这样的:

    int n = 6;
    String s = String.format("%1$"+n+"s", "");
Run Code Online (Sandbox Code Playgroud)
System.out.format("[%13s]%n", "");  // prints "[             ]" (13 spaces)
System.out.format("[%1$3s]%n", ""); // prints "[   ]" (3 spaces)
Run Code Online (Sandbox Code Playgroud)

  • +1.这个答案是对OP原始问题的最简单修复:OP只是缺少`$`字符. (2认同)

pol*_*nts 8

你可以用空格创建一个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 "      !"
Run Code Online (Sandbox Code Playgroud)

如果您使用了很多可能的值n,而不是new char[n]每次创建和填充,您可以创建一个足够长的空格字符串,并substring根据需要缩短.


Mar*_*aux 8

这是一种简单但垃圾的方式:

 int count = 20;
 String spaces = String.format("%"+count+"s", "");
Run Code Online (Sandbox Code Playgroud)

或填写

String spaces = String.format("%20s", "");
Run Code Online (Sandbox Code Playgroud)


Syl*_*lar 5

直接解决方案:

int count = 20;

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

就速度而言,StringBuilder是高效的。