我试图从字符串中删除奇数字符(请检查下面的程序)我遇到一个异常

时间:2018-09-04 15:02:39

标签: java char string-length stringbuffer

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)

2 个答案:

答案 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