2010-04-14 24 views
11

我想知道最簡單的方法是將整數轉換爲等效數量的空格。打印二進制搜索樹時,我需要它用於節點之間的空間。我想這將整數轉換爲等效數量的空格

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

但相對於位置的int值我越來越近3倍多的空間。我不確定是否正在格式化字符串。 任何建議都會很棒! 如果它更清晰,說位置= 6;我想在我的節點元素之前打印6個空格。

回答

11

我認爲你的意思是這樣的:

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

+1。這個答案是OP最初的問題的最簡單的解決方法:OP只是缺少'$'字符。 – polygenelubricants 2010-04-14 08:53:56

4

爲什麼不循環整數並在每次迭代中添加一個空格?

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

你也可以使用StringBuilder,而不是字符串,如果position可能會非常大,性能是一個問題。

+5

如果你打算做這樣的代碼,我會堅持(如果你是我的團隊),您使用StringBuilder。不管你循環了多少次,像這樣使用Strings效率非常低,不推薦使用,因爲編譯器將在內部使用StringBuilders來完成工作。但是不要只做一次,它會在每個循環中完成。另外檢查一下Formatter類。這是doco會談使用寬度規範右對齊數字。 – drekka 2010-04-14 05:50:51

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 "  !" 

如果你這樣做了很多的n可能值,而不是創建和每次填充new char[n],您可以創建的空間只有一個足夠長的字符串,並根據需要採取短substring

+0

我認爲這會比字符串緩衝區更快。 – 2010-04-14 09:46:23

4

直FOWARD溶液:

int count = 20; 

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

StringBuilder的是在速度方面有效。

+0

我應該加上''String spaces = sb.toString();'「 – 2010-04-14 08:15:58

+0

對,將它添加到代碼中。 – Sylar 2010-04-14 08:18:59

7

這是一個簡單的,但垃圾,道:

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

或填寫

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

爲什麼這是垃圾? – polygenelubricants 2010-04-14 08:43:06

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 

希望它會有所幫助!

0

如果一個人還是要用迭代求解,人們可能會想這樣做更加「常規」的方式,如:

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

請注意,這不適合零個空間的工作。對於您可能需要更多的東西一樣:

print (spaces?(1..spaces).collect(" ").join():"")