我有一个问题,其中我有一个包含字母表中字母的数组。我想知道将数组元素移动一定数量的最佳方法是什么。例如,如果键是 2,
和
array = "A,B,C,D,E.."
我怎样才能使改造后,
array = "C,D,E,F,G..."
最简单的解决方案是if
声明吗?
谢谢
我有一个问题,其中我有一个包含字母表中字母的数组。我想知道将数组元素移动一定数量的最佳方法是什么。例如,如果键是 2,
和
array = "A,B,C,D,E.."
我怎样才能使改造后,
array = "C,D,E,F,G..."
最简单的解决方案是if
声明吗?
谢谢
你必须使用一个数组,一个集合怎么样,比如List...
List<?> list = Arrays.asList('A', 'B', 'C', 'D', 'E');
Collections.rotate(list, -2);
System.out.println(list);
输出
[C, D, E, A, B]
或者,使用原始类包装器数组...例如字符、整数等。这仍然允许通过直写 Arrays.asList() 方法使用集合...。
final Character[] array = { 'A', 'B', 'C', 'D', 'E' };
Collections.rotate(Arrays.asList(array), -2);
System.out.println(Arrays.toString(array));
输出
[C, D, E, A, B]
char[] newArray = Arrays.copyRange(oldArray, shiftValue, oldArray.length);
http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#copyOfRange(char[], int, int)
编辑:如果您需要旋转数组,请查看以下方法:
http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#rotate(java.util.List, int)
或者:
Character[] arr = {'a', 'b', 'c', 'd'};
List<Character> chars = Arrays.asList(arr);
Collections.rotate(chars, -2);
arr = chars.toArray(new Character[0]);
这应该这样做:
char[] input = ...
char[] result = new char[input.length];
int shift = 2;
for(int i = 0; i < input.length; i++)
{
result[i] = input[(i + shift) % input.length];
}
如您所见,您需要一个for
循环。安if
不会这样做。它会将所有char
的 s 两个向左移动。
结果将是:['C', 'D', ..., 'Z', 'A', 'B']
这种方法称为循环移位。
你试过Collections.rotate
吗?
final Character[] vals = { 'A', 'B', 'C', 'D', 'E' };
final List<Character> list = Arrays.asList(vals);
Collections.rotate(list, -2);
/* vals will be rotated */
System.out.println(Arrays.toString(vals));
...产生(见ideone paste):
[C、D、E、A、B]