如何格式化具有可变数量参数的字符串

时间:2016-12-08 04:36:41

标签: java string string-formatting

假设我有一个方法可以返回一个随机数随机数的列表 - 我们将调用该方法List<Integer> getRandomNumberOfRandomNumbers();

System.out.println(String.format("Here are the random numbers: %s", getRandomNumberOfRandomNumbers()));

我知道这不起作用,但我怎样才能达到这个效果呢?

示例输出

Here are the random numbers:

1 4 2 4

Here are the random numbers:

2 43 323 434 3423 54

3 个答案:

答案 0 :(得分:3)

最简单的方法是让getRandomNumberOfRandomNumbers返回单个String中的所有数字。或者你可以全部内联,这样:

#!/bin/sh
if [ $# -eq 0 ]
then
    echo "enter a valid arguement" 
    exit
fi
for x in $@
do
    y=$x""$y
done
echo "the reverse is :$y"

答案 1 :(得分:2)

例如,如果我们的List Integers如下所示:

List<Integer> var = new ArrayList<>();
var.add(1);
var.add(4);
var.add(2);
var.add(4);

然后以您想要的方式打印List,您可以按照以下步骤操作:

System.out.println(String.format("Here are the random numbers:%n%n%s",
                             var.toString().replaceAll("[,\\[,\\]]", "")));

输出:

Here are the random numbers:

1 4 2 4

此处varlist您的函数getRandomNumberOfRandomNumbers()正在返回,我们正在使用var.toString()将其转换为String,但它返回[1, 4, 2, 4]。因此,我们需要删除[],。我使用正则表达式用空字符替换它们。这实际上是简单易行的方法,但不确定它是否是一种有效的方式!每当我需要将Colletion转换为String时,我会使用toString()方法然后使用正则表达式做一些技巧以获得我想要的表示形式。

更新:浏览网页后,我找到了一些替代品。 (首选超过我之前使用List.toString()的答案)

例如,在您的情况下,您可以执行以下操作:

StringJoiner sj = new StringJoiner(" ");
for (Integer i : var) {
    sj.add(String.valueOf(i));
}
System.out.println(sj.toString());

您可以使用以下两种方法执行相同操作。

答案 2 :(得分:0)

另一个解决方案是遍历列表并在打印出来之前将值添加到字符串构建器

像这样:

StringBuilder stringBuilder = new StringBuilder();
for(Integer number : getRandomNumberOfRandomNumbers())
    stringBuilder.append(number + " ");
System.out.println("Here are the random numbers: " + stringBuilder.toString().trim());