索引0处的数组为空

时间:2013-10-16 15:45:30

标签: java

String A = "00000000"; //8-bit
String [] Aarr = A.split("");
String [] Aarr1= Aarr.clone();
//trying to do a arithmetic right shift here
Aarr[0]=Aarr1[0];
Aarr[1]=Aarr1[0];
Aarr[2]=Aarr1[1];
Aarr[3]=Aarr1[2];
Aarr[4]=Aarr1[3];
Aarr[5]=Aarr1[4];
Aarr[6]=Aarr1[5];
Aarr[7]=Aarr1[6];
System.out.print(Arrays.toString(Aarr));

为什么我将输出设为[,, 0,0,0,0,0,0,0]而不是[,0,0,0,0,0,0,0,0],其中第一个元素是空的吗?

3 个答案:

答案 0 :(得分:7)

这种情况正在发生,因为当你split一个字符串,其中空字符串作为分隔符时,第一个结果是总是空字符串:因为每个可能的字符串都可以写成{{ 1}}。因此,使用空字符串“拆分”此字符串的第一个位置就在开头。

分割字符串后,您的数组看起来像这样:

"" + "" + "string content"

由于您正在移动数组并将第一个元素(["", "0", "0", "0", "0", "0", "0", "0", "0"] )复制到插槽""0中,因此您最后会在开头使用两个空字符串最后的输出。

1

请注意,相同的问题可能出现在字符串的末尾:因为所有字符串结束并且["", "", "0", "0", "0", "0", "0", "0", "0"] 也是如此。但是,在Java "" + ""trailing empty strings are discarded

的常见用法中

答案 1 :(得分:1)

循环怎么样:

char[] shiftResult = new char[8]; //Or whatever type it has to be
shiftResult[0] = A.charAt(0);
shiftResult[1] = A.charAt(0);
for (int i = 2; i < 8; i++) {
    shiftResult[i] = A.charAt(i-1);
}

不需要空字符串拆分。

答案 2 :(得分:0)

你的数组中有9个元素而不是8个。这是故意的吗?代码应该工作。