2011-03-10 63 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