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

问题描述 投票:3回答:3

我想用一个包含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());

}
java string java-stream string.format
3个回答
3
投票

类似于使用Collectors.joining进行以下操作,并根据需要使用索引和答案进行映射:

return IntStream.range(0, answers.size())
            .mapToObj(idx -> String.format("Q%s = %s", idx + 1, answers.get(idx)))
            .collect(Collectors.joining(", "))

1
投票

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);

1
投票

String.format在此示例中效果不佳,因为您确实需要格式中占位符的数量作为列表大小。您最好构建自己的String。但如果您想坚持[C0​​]:

由于String.format使用varargs(它是一个数组),因此您可以简单地使用String.format。请注意,格式中的占位符不能为toArray(),但类似{}%d

%s
© www.soinside.com 2019 - 2024. All rights reserved.