2016-06-10 3 views
-1

Моя задача - удалить последовательно повторяющиеся символы и заменить количество повторяющихся символов в строке. Когда я сравнивал два символа, я получил IndexOutOfBoundException. Я не знаю, как это исправить. Новичок. Здесь я прикрепил свой код. Может ли кто-нибудь проверить мой код и помочь мне.Сравнить символы в строке в java?

программа:

import java.util.*; 
public class RemoveDupchar{ 

    public static void main(String []args){ 

     String string = "aabbccdefatafazaacddsegf"; 

    char[] chars = string.toCharArray(); 

    ArrayList<Character> al=new ArrayList<Character>(); 
    for(char c : chars) 
    { 
     al.add(c); 
    } 

    int i=0; 

    int j=0,k=1; 
    char[] r = new char[100]; 

    for(i=0;i<al.size();i++) 
    { 
     char ch; 
     ch=al.get(i); 
     if(ch!=al.get(i+1))  **//I got Runtime error here** 
     { 
      r[j++]=ch; 
     } 
     else 
     { 
      r[j++]=ch; 
      while(al.get(i)==ch) 
      { 
       ++k; 
       ++i; 
      } 
      r[j++]=(char)k; 
     } 
    } 

    for(char c: r) 
    { 
     System.out.print(c); 
    } 
} 

}

+0

Точный stacktrace пожалуйста, нам нужно больше деталей. – Li357

ответ

1

В Java, коллекции 0 на основе, таким образом, коллекция размером 5 будет иметь места от 0 до 4. В вашем случае, у вас есть эта строка: al.get(i+1). Это попытается получить доступ к адресу n + 1 th, где n - размер коллекции.

Замена for(i=0;i<al.size();i++) следующим образом: for(i=0;i<al.size() - 1;i++) должен решить эту проблему.

+0

Большое вам спасибо. Я получил выход. – user3661367

+0

Я хочу добавить значения count в массив символов. Но я не могу добавить его в массив символов. Проблема заключается в строке r [j ++] = char (k). Как добавить целочисленное значение в массив char. – user3661367

+0

@ user3661367: «int» в массиве символов будет рассматриваться как символ. То, что вы могли бы сделать, было бы иметь строковый массив вместо этого и вместо этого добавить к нему строковое значение символа и числа. – npinti

Смежные вопросы