在Java中格式化字符串输出

时间:2011-03-10 02:18:50

标签: java string format string-formatting

我试图在输出中格式化一个字符串,而不是在我的程序中格式化它的方式。它是一个披萨配料菜单,在程序的大部分内容中,只要输出它,就会在成分之间用“\ n”格式化,以便创建一个“感觉”列表。但是,在显示用户选择的最终菜单中,我还要放置成分列表,因为用户可以自定义比萨饼上的成分。对于垂直的成分列表来说这很困难,因为如果用户有多个披萨,它可以使最终输出真的很长。我试图找出是否有一种方法可以采用格式化为垂直显示的相同字符串,并使用逗号之间的逗号水平显示而不是“\ n”。有任何想法吗?或者我应该创建一个新的字符串,使用我需要的信息以我想要的方式格式化?

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(...),以便水平显示成分列表。

4 个答案:

答案 0 :(得分: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", ", ")

答案 1 :(得分:1)

String s = "hi\nthere";
s.replaceAll("\n", ","); // (returns "hi,there")

http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#replaceAll(java.lang.String,java.lang.String)

答案 2 :(得分: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 Commons StringUtils类中。)

答案 3 :(得分: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);