import java.util.*;
import java.io.*;
import java.lang.*;
public class Tester {
public static void main(String a[]) {
String s;
int len;
Scanner sc=new Scanner(System.in);
s=sc.nextLine();
StringBuffer sb=new StringBuffer(s);
int i= 1;
len= sb.length();
len=len-1;
while(i<=len)
{
sb.deleteCharAt(i);
i=i+2;
}
System.out.println(sb);
}
}
i / p:
abcdefghi
O / P:
线程“主”中的异常java.lang.StringIndexOutOfBoundsException: 字符串索引超出范围:7 at java.lang.AbstractStringBuilder.deleteCharAt(AbstractStringBuilder.java:824) 在java.lang.StringBuffer.deleteCharAt(StringBuffer.java:441)在 Tester.main(Tester.java:29)
答案 0 :(得分:2)
这是因为每次删除字符时,字符串的长度都会减少1,并且您仍在迭代直到原始长度。在代码中应用以下更改,以使data
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]
[24 25 26 27 28 29]]
mask
[ True True False False True]
data[mask]
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[24 25 26 27 28 29]]
data[mask, 2]
[ 2 8 26]
data[mask][:,[2,4]]
[[ 2 4]
[ 8 10]
[26 28]]
data[mask, [2,4]]
Traceback (most recent call last):
[...]
IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (3,) (2,)
的值不会超出i
的当前长度,并且String
条件满足直到有效长度为止:
while
答案 1 :(得分:0)
问题是每次调用deleteCharAt时,它都会将sb长度减去1,因此在某个点i = 7但sb长度为5,我们正在删除i = 7处的索引,这导致索引输出您所看到的绑定异常。 您可以将长度减少1,以解决此问题。 len = len-1