我在Java中有一个字节数组,需要获取它的一部分。我希望以与使用切片的Python列表相同的方式使用Java数组。 Java中有类似的东西吗?提前谢谢。
答案 0 :(得分:8)
您可以使用数组(http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html)内置Arrays#copyOfRange()
Arrays.copyOfRange(oldArray, startIndex, endIndex);
答案 1 :(得分:7)
使用普通数组时,没有相应的数据。
使用ArrayList
,您可以使用array_list.subList(fromIndex, toIndex)
来获得切片。
切片由原始ArrayList
支持。对切片所做的更改将反映在原始文件中。原件中的非结构性更改将反映在子列表中;子列表中未定义原始列表的结构修改结果。
byte[] byte_array = { 10, 20, 30, 40, 50 };
List<Byte> byte_list = Arrays.asList(byte_array);
List<Byte> slice = byte_list.subList(1,3); // {20, 30}
byte x = slice.get(1) ; // Returns 30
slice.set(0, 21);
// slice is now {21, 30} and byte_array is { 10, 21, 30, 40, 50}
答案 2 :(得分:2)
Java在数组上没有构建方法来进行切片,但是有些类可以帮助你完成它。
检查出来:How to create a sub array from another array in Java?
使用java.util.Arrays类中的copyOfRange方法:
int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);
startIndex是要复制的范围的初始索引(包括)。 endIndex是要复制的范围的最终索引,不包括。 (该索引可能位于数组之外)
答案 3 :(得分:1)
没有类似k [: - 3]或类似
的pythonic方式但你可以使用非常类似的工具Arrays类:
Arrays.copyOfRange(k, 0, 1);
答案 4 :(得分:1)
为了得到负值,你可以为此做一个辅助方法:
public final class Slice {
private Slice() {}
public static <T> T[] copyOfRange(final T[] a, int start) {
return slice(a, start, a.length);
}
public static <T> T[] copyOfRange(final T[] a, int start, int end) {
if (start < 0) start = a.length + start;
if (end < 0) end = a.length + end;
return Arrays.copyOfRange(a, start, end);
}
}
如果您希望它非常快/实用,您还需要为每种基本类型定义它。
答案 5 :(得分:0)
你可以System.arrayCopy()
方法来做到这一点:
例如:
int[] arr = new int[100];
// copy from sarr - 11 to 20th elements to arr
System.arrayCopy(sarr,11,arr,0,10);
答案 6 :(得分:0)
for循环的工作方式与python中的slice运算符完全不同。
这是python中的列表:
>>>a = [1, 2, 3, 4, 5]
这就是切片操作符的工作方式:
>>>a[1:4:2] # Specify the start index, end index and the increment
[2,4] # Output returned
Java中的for循环实现相同的功能将如下工作:
for(int i=start_index; i<end_index; i+=increment)
System.out.print(a[i] + " ");