如何使用可变数量的参数格式化字符串
How to format a string with a variable number of arguments
假设我有一个方法 returns 一个包含随机数字的列表 - 我们将调用该方法 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
例如,如果我们有一个 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
此处 var
是 list
您的函数 getRandomNumberOfRandomNumbers()
正在返回,我们正在使用 var.toString()
将其转换为字符串,但它 returns [1, 4, 2, 4]
.因此,我们需要删除 [
、]
和 ,
。我使用正则表达式将它们替换为空字符。这实际上是一种简单易行的方法,但不确定它是否是一种有效的方法!每当我需要将 Colletion
转换为 String
时,我都会使用 toString()
方法,然后使用正则表达式做一些技巧以获得我想要的表示形式。
更新: 网上冲浪后,我发现没有几个选择。 (比我之前使用 List.toString()
的回答更受欢迎)
- StringJoiner : a relevant answer 在 SO
例如,在你的情况下,你可以这样做:
StringJoiner sj = new StringJoiner(" ");
for (Integer i : var) {
sj.add(String.valueOf(i));
}
System.out.println(sj.toString());
您可以使用以下两个备选方案执行相同的操作。
- StringUtils : a relevant answer 在 SO
- String.Join : requires CharSequence
最简单的方法是将 getRandomNumberOfRandomNumbers return 所有数字都放在一个字符串中。或者你可以全部在线完成,像这样:
getRandomNumberOfRandomNumbers().stream()
.map(Object::toString)
.collect(Collectors.joining(" "));
另一个解决方案是遍历列表并在打印之前将值添加到字符串生成器
像这样:
StringBuilder stringBuilder = new StringBuilder();
for(Integer number : getRandomNumberOfRandomNumbers())
stringBuilder.append(number + " ");
System.out.println("Here are the random numbers: " + stringBuilder.toString().trim());
假设我有一个方法 returns 一个包含随机数字的列表 - 我们将调用该方法 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
例如,如果我们有一个 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
此处 var
是 list
您的函数 getRandomNumberOfRandomNumbers()
正在返回,我们正在使用 var.toString()
将其转换为字符串,但它 returns [1, 4, 2, 4]
.因此,我们需要删除 [
、]
和 ,
。我使用正则表达式将它们替换为空字符。这实际上是一种简单易行的方法,但不确定它是否是一种有效的方法!每当我需要将 Colletion
转换为 String
时,我都会使用 toString()
方法,然后使用正则表达式做一些技巧以获得我想要的表示形式。
更新: 网上冲浪后,我发现没有几个选择。 (比我之前使用 List.toString()
的回答更受欢迎)
- StringJoiner : a relevant answer 在 SO
例如,在你的情况下,你可以这样做:
StringJoiner sj = new StringJoiner(" ");
for (Integer i : var) {
sj.add(String.valueOf(i));
}
System.out.println(sj.toString());
您可以使用以下两个备选方案执行相同的操作。
- StringUtils : a relevant answer 在 SO
- String.Join : requires CharSequence
最简单的方法是将 getRandomNumberOfRandomNumbers return 所有数字都放在一个字符串中。或者你可以全部在线完成,像这样:
getRandomNumberOfRandomNumbers().stream()
.map(Object::toString)
.collect(Collectors.joining(" "));
另一个解决方案是遍历列表并在打印之前将值添加到字符串生成器
像这样:
StringBuilder stringBuilder = new StringBuilder();
for(Integer number : getRandomNumberOfRandomNumbers())
stringBuilder.append(number + " ");
System.out.println("Here are the random numbers: " + stringBuilder.toString().trim());