2
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] 第一个元素是空的?

4

3 回答 3

7

发生这种情况是因为当您split使用空字符串作为分隔符的字符串时,第一个结果始终是空字符串:因为每个可能的字符串都可以写为"" + "" + "string content". 因此,使用空字符串“拆分”该字符串的第一个位置就在开头。

拆分字符串后,您的数组如下所示:

["", "0", "0", "0", "0", "0", "0", "0", "0"]

由于您正在右移数组并将第一个元素 ( "") 复制到两个插槽01中,因此最终输出的开头会出现两个空字符串。

["", "", "0", "0", "0", "0", "0", "0", "0"]

请注意,同样的问题也可能出现在字符串的末尾:因为所有字符串也以as结尾"" + ""。然而,在 Java 的常见用法中String.split尾随的空字符串会被丢弃

于 2013-10-16T15:55:47.427 回答
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);
}

不需要空字符串拆分。

于 2013-10-16T16:25:24.597 回答
0

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

于 2013-10-16T15:49:11.243 回答