【问题标题】:How to format this output?如何格式化此输出?
【发布时间】:2020-11-14 21:30:42
【问题描述】:

我创建了一个方法,它应该在输入任何数字时返回一个不断增长的数字列表。 例如:

输入:5

预期输出:[1, 2 2, 3 3 3, 4 4 4 4, 5 5 5 5 5]

当前输出:[1 , 2 2 , 3 3 3 , 4 4 4 4 , 5 5 5 5 5 ]

输入:2

预期输出:[1, 2 2]

当前输出:[1 , 2 2 ]

如何删除空格? 这是我的代码:

ArrayList < String > maxarray = new ArrayList < String > ();
int i, j;
String num = "";

for (i = 1; i <= max; i++) {
    num = "";
    for (j = 1; j <= i; j++) {
        num = num + i + " ";
    }
    //System.out.print(i);
    maxarray.add(num);
}
return maxarray;

我试过了:num= num.replace(" ",""); num = num.replace(" ", ""); 但是,它们似乎不起作用。 如果我尝试将其转换为字符串,则会得到以下输出:1 2 2 3 3 3

请帮帮我

【问题讨论】:

  • String 有一个 trim() 方法来删​​除尾随和前导空格。
  • 我也尝试过 trim(),但它不起作用,因为我认为 trim() 只适用于字符串,而不适用于数组。我已经解决了这个问题,还是谢谢!
  • 您可以使用:num = num + (num.length() == 0 ? "" : " ") + i
  • 是的,它只适用于字符串,但 num 是一个字符串。

标签: java string arraylist


【解决方案1】:

简单而短视的解决方案:只需在将字符串添加到ArrayList 之前修剪字符串:

        maxarray.add(num.trim());

通过此更改,输出为:

[1, 2 2, 3 3 3, 4 4 4 4, 5 5 5 5 5]

trim() 删除尾随空格(和前导,如果有的话),但不是数字之间的空格。

从一开始就产生正确的输出:然而,与其产生不完全正确的输出然后纠正它,最终从一开始就产生正确的输出可能不会那么混乱。也就是说,最后一个数字后面没有空格。这也是 Berto99 的答案。我首选的方法是:从内部循环中取出一次迭代,并避免在那里添加空间。

    for (i = 1; i <= max; i++) {
        num = "";
        for (j = 1; j < i; j++) { // stop one number before i
            num = num + i + " ";
        }
        num = num + i; // add no space here
        maxarray.add(num);
    }

输出仍然是:

[1, 2 2, 3 3 3, 4 4 4 4, 5 5 5 5 5]

我发现这种方式比 Berto99 的答案中带有额外 if 语句的版本更容易阅读。

为了精确maxarray 不是一个 int 数组,它是一个 ArrayList 的字符串。而我们需要修剪的不是ArrayList,而是其中的每个字符串。

PS Stream 版本:对于了解和喜欢流的读者,这里有一个流版本。如果您还不想了解流,请忽略。

    List<String> maxarray = IntStream.rangeClosed(1, max)
            .mapToObj(i -> IntStream.rangeClosed(1, i)
                    .mapToObj(j -> String.valueOf(i))
                    .collect(Collectors.joining(" ")))
            .collect(Collectors.toList());

其中一个方便的事情是Collectors.joining(" ")在数字之间放置空格,而不在第一个之前或最后一个之后放置任何空格,这解决了所问的问题。

【讨论】:

    【解决方案2】:

    从这里可以看出:

    ArrayList < String > maxarray = new ArrayList < String > ();
    int i, j;
    String num = "";
    
    for (i = 1; i <= max; i++) {
        num = "";
        for (j = 1; j <= i; j++) {
            num = num + i + " ";
                            ^^^^-- here
        }
        //System.out.print(i);
        maxarray.add(num);
    }
    return maxarray;
    

    你在每个数字后面加一个空格,所以你只需要检查你是否不在最后一个数字中,以免在这种情况下添加空格:

    ArrayList < String > maxarray = new ArrayList < String > ();
    int i, j;
    String num = "";
    
    for (i = 1; i <= max; i++) {
        num = "";
        for (j = 1; j <= i; j++) {
            num = num + i;
            if(j < i) // <--- check if you are not in the last iteration
               num = num + " ";
        }
        //System.out.print(i);
        maxarray.add(num);
    }
    return maxarray;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-27
      • 2016-01-26
      相关资源
      最近更新 更多