有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

假设我有一个方法,它返回一个包含随机数的列表——我们将调用该方法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) 个答案

  1. # 1 楼答案

    例如,如果我们有一个ListIntegers,如下所示:

    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()将其转换为字符串,但它返回[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. # 2 楼答案

    让getRandomNumberOfRandomNumbers返回单个字符串中的所有数字是最简单的。或者你可以在线完成,比如:

    getRandomNumberOfRandomNumbers().stream()
        .map(Object::toString)
        .collect(Collectors.joining(" "));
    
  3. # 3 楼答案

    另一种解决方案是迭代列表,并在打印出来之前将值添加到字符串生成器中

    就像这样:

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