使用Arrays.toString()以及两端的方括号“ []”时,是否有任何方法可以消除数组末尾的多余0?

时间:2020-02-28 12:41:14

标签: java arrays

我已经编写了将十进制整数转换为二进制格式的程序:

int b=17,i=0;
int s[]=new int[10];
while(b>0)
{
    s[i]=(b%2);
    b=b/2;
    i++;
}
System.out.println(Arrays.toString(s));

此打印:[1、0、0、0、1、0、0、0、0、0]

但是我希望使用while()循环将“ 10001”作为输出,

int j;
for(j=i-1;j>=0;j--)
{
    System.out.print(s[j]);
}

这会按照我的要求打印:'10001',但是还有其他方法可以在不使用循环的情况下获取此输出吗?

是否有办法在1,0,0,1之后删除[1、0、0、0、1、0、0、0、0、0]中多余的0?

4 个答案:

答案 0 :(得分:1)

但是还有其他方法可以在不使用循环的情况下获取此输出吗?

无论您如何执行, 都会在某个地方的代码中循环,只是不一定要在您编写的代码中。因此,我将“无需使用循环”解释为“无需自己编写循环”。

一种方法是使用Stream

String result = Arrays.stream(s).map(x -> Integer.toString(x)).collect(Collectors.joining());
System.out.println(result);

您可能还希望反转字符串,在这种情况下,您可以这样做:

String result = Arrays.stream(s).map(x -> Integer.toString(x))
                .collect(
                    StringBuilder::new, 
                    StringBuilder::append, 
                    StringBuilder::append)
                .reverse().toString();

另一种方法是在将数字转换为二进制时直接创建所需的字符串:

int b=17;
StringBuilder sb = new StringBuilder();
while(b>0)
{
    sb.append(b%2);
    b=b/2;
}
System.out.println(sb.reverse());

是否有办法在1,0,0,1之后删除[1、0、0、0、1、0、0、0、0、0]中多余的0?

由于数组大小是固定的,因此您必须创建一个新数组:

int[] withoutTrailingZeros = Arrays.copyOfRange(s, 0, i);

答案 1 :(得分:1)

从头开始没有数组,并将结果附加到String。这将消除到String的转换数组。

int b=17;
String result = "";
while(b>0)
{
    result = (b%2) + result;
    b=b/2;
}

System.out.println(result);

String也是字符数组,因此在内部您不会闪避任何数组。

正如@DodgyCodeException所指出的那样,将int转换为binary的原始OP代码正在生成反向的二进制字符串/数组。上面的代码已经修复了。

答案 2 :(得分:0)

尝试如下操作:

String string = Arrays.toString(s);
System.out.println(string .substring(1, string .length() - 1));

编辑1:

        int b = 17;
        StringJoiner stringJoiner = new StringJoiner(",");

        while (b > 0) {
            stringJoiner.add(String.valueOf((b % 2)));
            b = b / 2;
        }
        System.out.println(stringJoiner.toString());

答案 3 :(得分:0)

您介意使用ArrayList代替Array

        int b=17,i=0;
//        int s[]=new int[10];
        List<Integer> s = new ArrayList<>();
        while(b>0)
        {
            s.add(b%2);
            b=b/2;
            i++;
        }
        System.out.println(s.toString());
相关问题