2017-05-04 4 views
-2

alle so schreibe ich einen Code, der "aabbcc" nehmen und "abc" ausgeben sollte, so dass die wiederholten Zeichen durch Rekursion löschen. Hoffe, du könntest mir helfen.String-Index außerhalb des Bereichs Fehler in Java

import java.util.*; 

public class StringReverser 
{ 
public static String getReverser(String i) 
{ 
    if (i==(" ")) 
     return ""; 
    if (i.charAt(0)==i.charAt(1)) 
     return i.substring(1) + getReverser(i.substring(2)); 
    else 
    return getReverser(i.substring(1)); 
} 

public static void main (String[] args) 
{ 
    Scanner sc = new Scanner(System.in); 
    System.out.println("Enter a String"); 
    String in = sc.nextLine(); 
    System.out.println(getReverser(in)); 
} 
} 

Und wenn ich meinen Code ausführen bekomme ich diesen Fehler:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1 at java.lang.String.charAt(String.java:646) at StringReverser.getReverser(StringReverser.java:9) at StringReverser.getReverser(StringReverser.java:12) at StringReverser.getReverser(StringReverser.java:10) at StringReverser.main(StringReverser.java:20)

+2

Nun, was ist, wenn Sie getroffen 'if (i.charAt (0) == i.charAt (1))' und die Zeichenfolge ist nur ein Zeichen lange? –

+0

@ T.J.Crowder Immer noch der gleiche Fehler – Massoud

+0

@MaxZoom also was genau bedeutet das? – Massoud

Antwort

0

Vielleicht Split benutzen? Dies ist einfacher zu verwenden.

0

Hier ist eine funktionierende Lösung. Du warst nah!

Sie möchten immer das Wort zurückgeben, wenn es nur ein Zeichen ist (sonst erhalten Sie eine Ausnahme außerhalb der Grenzen).

Wenn die Zeichen nebeneinander gleich sind, geben Sie ein neues Wort zurück, das nur das Zeichen ganz rechts enthält (ein Duplikat wird übersprungen).

public static String getReverser(String word) { 
    System.out.println(word); 
    if (word.length() == 1) { 
     return word; 
    } 
    if (word.charAt(0) == word.charAt(1)) { 
     return getReverser(word.substring(1)); 
    } else { 
     return word.substring(0, 1) + getReverser(word.substring(1)); 
    } 
} 

Ausgang:

Enter a String: 
aabbccccaa 
aabbccccaa 
abbccccaa 
bbccccaa 
bccccaa 
ccccaa 
cccaa 
ccaa 
caa 
aa 
a 
abca 
+0

Vielen Dank Kumpel !! – Massoud

0
public static void main(String[] args) { 

    Scanner sc = new Scanner(System.in); 
    System.out.println("Enter a String"); 

    StringBuilder builder = new StringBuilder(); 

    char[] charArray = sc.nextLine().toCharArray(); 
    for(char chr : charArray){ 
     if(builder.indexOf(String.valueOf(chr))==-1){ 
      builder.append(chr); 
     } 
    } 

    System.out.println(builder); 
} 
Verwandte Themen