Я пытался удалить нечетный символ из строк (пожалуйста, проверьте мою программу ниже) я получаю одно исключение - PullRequest
0 голосов
/ 04 сентября 2018
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:

Исключение в потоке "main" java.lang.StringIndexOutOfBoundsException: Индекс строки вне диапазона: 7 в java.lang.AbstractStringBuilder.deleteCharAt (AbstractStringBuilder.java:824) в java.lang.StringBuffer.deleteCharAt (StringBuffer.java:441) в Tester.main (Tester.java:29)

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Проблема заключается в том, что каждый раз, когда вызывается deleteCharAt, он вычитает длину sb на единицу, поэтому в некоторой точке i = 7, но длина sb равна 5, и мы удаляем индекс при i = 7, в результате чего индекс выходит связанного исключения, которое вы видите. Вы можете уменьшить длину на 1, чтобы исправить это в вашем цикле. Len = LEN-1

0 голосов
/ 04 сентября 2018

Это потому, что каждый раз, когда вы удаляете символ, длина строки уменьшается на 1, а вы продолжаете выполнять итерацию до первоначальной длины. Примените приведенные ниже изменения в своем коде, чтобы значение i не выходило за пределы текущей длины String, а условие while соответствовало действительной длине:

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