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],其中第一个元素是空的吗?
答案 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个。这是故意的吗?代码应该工作。