我想用一个包含String.format的String.format(“ Q1 = {},Q2 = {},Q3 = {},Q4 = {}”列表)从包含整数的列表的值中创建一个字符串。
private String createString(Player player){
List<Integer> answers= new ArrayList<>();
answers.add(player.getQuestion1());
answers.add(player.getQuestion2());
answers.add(player.getQuestion3());
answers.add(player.getQuestion4());
answers.add(player.getQuestion5());
answers.add(player.getQuestion6());
answers.add(player.getQuestion7());
answers.add(player.getQuestion8());
answers.add(player.getQuestion9());
answers.add(player.getQuestion10());
return String.format("Q1={}, Q2={}, Q3={}, Q4={}, Q5={}, Q6={}, Q7={}, Q8={}, Q9={}, Q10={}", answers.stream().map(a -> a.toString());
}
类似于使用Collectors.joining
进行以下操作,并根据需要使用索引和答案进行映射:
return IntStream.range(0, answers.size())
.mapToObj(idx -> String.format("Q%s = %s", idx + 1, answers.get(idx)))
.collect(Collectors.joining(", "))
String.format
不适合格式化列表。通常,String.join
更合适。
首先,创建一个用逗号连接的字符串列表:
List<String> strings = IntStream.rangeClosed(1, answers.size())
.mapToObj(x -> "Q" + x + "=" + answers.get(x - 1))
.collect(Collectors.toList());
然后,呼叫String.join
:
String result = String.join(", ", strings);
String.format
在此示例中效果不佳,因为您确实需要格式中占位符的数量作为列表大小。您最好构建自己的String。但如果您想坚持[C0]:
由于String.format
使用varargs(它是一个数组),因此您可以简单地使用String.format
。请注意,格式中的占位符不能为toArray()
,但类似{}
,%d
等
%s