lauflängencodierung

Status
Nicht offen für weitere Antworten.
T

th22

Gast
hi

also ich wollte ne lauflängencodierung machen. z.b. aus AAADFGGG wird A3DFG3.
und ich bekomm immer die Fehlermeldung:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind
ex out of range: 0
at java.lang.String.charAt(String.java:455)
at RLE.makeShort(RLE.java:25)
at RLE.main(RLE.java:6)

ich hab folgendermaßen programmiert. kann jemand den fehler finden?



Code:
class Laenge { 

     public static void main(String args[]) { 
             
             String in = In.readString(); 
        System.out.println(makeShort(in)); 
          
     } 

     public static String makeShort(String in) { 
          StringBuffer out = new StringBuffer(); 
          int j=1,i=1; 

          for(i=1; i<in.length(); i++) { 
               if(in.charAt(i) == in.charAt(i-1)) 
                    j++; 
               else { 
                    if(j>1) 
                         out.append(in.charAt(i-1)).append(j); 
                    else 
                         out.append(in.charAt(i-1)); 
                    j=1; 
               } 
          } 
          out.append(in.charAt(i-1)); 
          if(j>1) 
               out.append(j); 

          return out.toString(); 
     } 
}
 

André Uhres

Top Contributor
Also ich weiss nicht wo das Problem liegt.
Ich habe den Algorithmus etwas vereinfacht, vielleicht hilft das:
Code:
   public static String makeShort(String in) {
        StringBuffer out = new StringBuffer();
        for(int i=0; i < in.length();) {
            char ch = in.charAt(i);
            out.append(ch);
            int j = 0;
            for(; i < in.length()  &&  in.charAt(i) == ch; i++, j++);
            if(j>1)  out.append(j);
        }
        return out.toString();
    }
 

Murray

Top Contributor
Beim ursprünglichen Algorithmus dürfte ein Leerstring zu so einer Exception führen: i ist dann 1, charAt( 1-1) greift auf das - nicht vorhandene - erste Zeichen zu.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben