2011-03-10 85 views
0

我想格式化輸出中的字符串,而不是它已經格式化在我的程序中的方式。這是一個比薩成分菜單,並且在程序的大部分時間裏,每當它被輸出時,它的格式都與原料之間的「\ n」一致,從而創建一個「感覺」列表。但是,在顯示用戶選擇的最終菜單中,我還要放置配料列表,因爲用戶可以自定義比薩餅上的哪些配料。對於成分的垂直列表來說這很困難,因爲如果用戶有多個披薩,它可以使最終產量真的很長。我試圖找出是否有一種方法,我可以採用相同的字符串,該字符串已被格式化爲垂直顯示,並以逗號之間的逗號而不是「\ n」水平顯示。有任何想法嗎?或者我應該創建一個新的字符串,並按照我需要的信息格式化我需要的信息?在Java中格式化字符串輸出

String i1 = "Pepperoni", i2 = "Sausage", i3 = "Canadian Bacon"; 
String ingredients = i1 + "\n" + i2 + "\n" + i3 + "\n"; 
System.out.print(ingredients); 
System.out.printf("Your pizza includes only these ingredients: %s", ingredients); 

第一是System.out.print(成分)是類似於我有垂直打印成分在整個程序,使得它很容易可讀給用戶的代碼。

第二個System.out.print(...)是我試圖格式化,以便水平顯示成分列表。

回答

1
String i1 = "Pepperoni", i2 = "Sausage", i3 = "Canadian Bacon"; 
String ingredients = i1 + "\n" + i2 + "\n" + i3; 
System.out.println(ingredients); 
System.out.println("Your pizza includes only these ingredients: " + ingredients.replace("\n", ", ") 
+0

這正是我所期待的。內聯的格式化方式。萬分感謝! – Michael 2011-03-10 02:37:51

+0

lol =)[見下面的答案] – necromancer 2011-03-10 04:00:48

1

我還以爲這是清晰的:

String i1 = "Pepperoni", i2 = "Sausage", i3 = "Canadian Bacon"; 
System.out.printf("%s\n%s\n%s\n", i1, i2, i3); 
System.out.printf("Your pizza includes ingredients: %s %s %s", i1, i2, i3); 

的一點是,如果你打算使用printf完全可以利用它將字符串連接在一起的能力。


從您的評論,我認爲,成分的數量是可變的。如果是這樣的話,使用printf來格式化「列表」(就像我上面所做的那樣)不會削減它。相反,你需要一個輔助方法是這樣的:我宣稱這是更普遍的

public static String join(String separator, Object[] things) { 
    StringBuilder sb = new StringBuilder(); 
    for (Object thing : things) { 
     if (sb.length() > 0) { 
      sb.append(separator); 
     } 
     sb.append(thing); 
    } 
    return sb.toString(); 
} 

則...

Object[] ingredients = new Object[]{i1, i2, i3}; // ... or a dynamic sided array 
System.out.print(join("\n", ingredients)); 
System.out.println("Your pizza includes ingredients: " + join(" ", ingredients)); 

(可變大小的數組的作品),更容易理解,可能更有效比其他建議。

(該join輔助方法,在各種名目存在一些類庫的;例如,在Apache的百科全書StringUtils類)

+0

這是一個更清晰的例子,但是,字符串「成分」是動態的,並根據用戶的選擇而變化。我明白,數組可以做到這一點,但是,我不太明白並知道如何使用它們。在課堂上沒有學過,我自己的書很難理解。謝謝你的澄清。 – Michael 2011-03-10 03:21:06

0

與替換\ n爲新秀編程風格,將回來不久咬你。請嘗試使用逗號部分(並且手動完成\ n部分,就像您已經在做的一樣):

String [] ingredients = {"Pepperoni", "Sausage", "Canadian Bacon"}; 
String almost_there = Arrays.deepToString(ingredients); 
String there = almost_there.substring(1, almost_there.length() - 1); 
System.out.printf("Your pizza includes ingredients: ", there); 
+0

你也可以使用org.apache.commons.lang中更一般的join(String,String)方法。StringUtils類,如果它是值得包括整個庫,並跟上它,或自己寫一個類似的。鏈接:http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/StringUtils.html – necromancer 2011-03-10 03:59:15