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


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:

阿布德夫吉

操作/操作:

线程"main"中的异常 java.lang.StringIndexOutOfBoundsException: 字符串索引超出范围:7 at java.lang.AbstractStringBuilder.deleteCharAt(AbstractStringBuilder.java:824( at java.lang.StringBuffer.deleteCharAt(StringBuffer.java:441( at 测试人员(测试.java:29(

这是因为每次删除字符时,字符串的长度都会减少 1,并且您仍在迭代直到原始长度。在代码中应用以下更改,以便i的值不会超过String的当前长度,并且while条件满足直到有效长度:

while(i<=len)
{
sb.deleteCharAt(i);
i=i+2; 
len--;
}

问题是每次调用 deleteCharAt 时,它都会将 sb 长度减去 1,因此在某些时候 i=7 但 sb 长度为 5,我们正在删除 i=7 处的索引,这会导致您看到的索引越界异常。 您可以将长度减少 1 以在循环中解决此问题。len=len-1

相关内容

最新更新