如何通过从列表中获取参数来创建具有 String.format 的字符串

How to create a String with String.format by taking parameters from a list

我想从包含整数的列表的值创建一个 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。但是如果你想坚持 String.format:

由于 String.format 使用可变参数(这是一个数组),您可以简单地使用 toArray()。请注意,格式中的占位符不能是 {},而是 %d%s

return String.format("Q1=%s, Q2=%s, Q3=%s, Q4=%s, Q5=%s, ...", answers.toArray());