Arrays.binarySearch 的行为
Behaviours of Arrays.binarySearch
我的意图是在遍历 excel 文件时跳过一些预定义的行,如下所示:
int rowIndex = 0;
int[] rowsToBeSkipped = new int[]{1,2,15,16,17,18,31,32,33,34};
while (rowIterator.hasNext())
{
Row row = rowIterator.next();
if(Arrays.binarySearch(rowsToBeSkipped, rowIndex) == -1){
System.out.println("true "+rowIndex);
}else{
System.out.println("false "+rowIndex);
}
rowIndex++;
}
}
下面是结果:
true 0
false 1
false 2
false 3
false 4
false 5
false 6
false 7
false 8
false 9
false 10
false 11
false 12
false 13
false 14
false 15
false 16
false 17
false 18
false 19
false 20
false 21
false 22
false 23
false 24
false 25
false 26
false 27
false 28
false 29
false 30
false 31
false 32
false 33
false 34
false 35
false 36
false 37
false 38
false 39
false 40
false 41
谁能解释一下为什么只有0可以匹配条件?
您误用了这种方法。引用它的文档(强调我的):
Returns:
index of the search key, if it is contained in the array; otherwise, (-(insertion point) - 1). The insertion point is defined as the point at which the key would be inserted into the array
这意味着此方法将 return -1 当且仅当您尝试搜索的值将被插入到数组的开头时——这里是 0 的情况。
您应该测试任何严格小于 0 的值,而不仅仅是 -1:
if (Arrays.binarySearch(rowsToBeSkipped, rowIndex) < 0) {
// etc
我的意图是在遍历 excel 文件时跳过一些预定义的行,如下所示:
int rowIndex = 0;
int[] rowsToBeSkipped = new int[]{1,2,15,16,17,18,31,32,33,34};
while (rowIterator.hasNext())
{
Row row = rowIterator.next();
if(Arrays.binarySearch(rowsToBeSkipped, rowIndex) == -1){
System.out.println("true "+rowIndex);
}else{
System.out.println("false "+rowIndex);
}
rowIndex++;
}
}
下面是结果:
true 0
false 1
false 2
false 3
false 4
false 5
false 6
false 7
false 8
false 9
false 10
false 11
false 12
false 13
false 14
false 15
false 16
false 17
false 18
false 19
false 20
false 21
false 22
false 23
false 24
false 25
false 26
false 27
false 28
false 29
false 30
false 31
false 32
false 33
false 34
false 35
false 36
false 37
false 38
false 39
false 40
false 41
谁能解释一下为什么只有0可以匹配条件?
您误用了这种方法。引用它的文档(强调我的):
Returns: index of the search key, if it is contained in the array; otherwise, (-(insertion point) - 1). The insertion point is defined as the point at which the key would be inserted into the array
这意味着此方法将 return -1 当且仅当您尝试搜索的值将被插入到数组的开头时——这里是 0 的情况。
您应该测试任何严格小于 0 的值,而不仅仅是 -1:
if (Arrays.binarySearch(rowsToBeSkipped, rowIndex) < 0) {
// etc