# String von hinten alle drei Zeichen abschneiden und in umgekehrter Reihenfolge ausgeben.



## WinterMensch (8. Dez 2012)

Guten Morgen alle miteinander, 

Also ich habe einen Kommandozeilenparameter und soll den nun von hinten begonnen in Teile zu je drei Zeichen zerlegen und in umgekehrter Reihenfolge wieder zusammengesetzt am Bildschirm ausgeben.
Das ganze soll rekursiv geschehen, indem ich die letzten drei Zeichen lokal in der Methode in einem String speicher und den vorderen Rest rekursiv der Methode wieder übergebe.

Zum Beispiel:

123456
456123

oder:

1234567
5672341

Ich weiß schon, dass ich zum Beispiel mit


```
rest = substr("abcdef", -3, 0);
```

"def" zurückgeben kann. Aber bleibt mir dann der Rest, also "abc" erhalten?
Und wie kann ich das ganze rekursiv lösen?


----------



## Gast2 (8. Dez 2012)

Das ganze kann so ausschauen:

```
public String rekursiv (String input) {
	if (input.length() < 3) {
		return input;
	}
	
	String affix = input.substring(input.length() - 3);
	String prefix = input.substring(0, input.length() - 3);
	
	return affix + rekursiv (prefix);
}
```
Durch das untere return bleibt dir der komplette String erhalten. Du baust ihn damit Stück für Stück zusammen.


----------



## WinterMensch (8. Dez 2012)

Ok, das klingt logisch, ich würde in Zeile 2 

if (input.length() <= 3) {

schreiben, weil ja auch bei drei zeichen, der String einfach wieder in seiner ursprünglichen Form ausgegeben werden kann.
Allerdings habe ich jetzt noch das Problem, dass ich nicht weiß wie ich das mit dem Kommandozeilenparameter mache. 
Also wenn ich das Programm aufrufe, kann ich ja einfach etwas eingeben:

java Name Kommandozeilenparameter

aber wie kann ich den dann im Programm verwenden?


----------



## TKausL (8. Dez 2012)

Dafür sind in der 
	
	
	
	





```
public static void main(String[] args)
```
 die args da. Das ist ein Array der Argumente, die du übergeben hast.


----------



## WinterMensch (8. Dez 2012)

Ja aber über welchen Namen greife ich den darauf zu?


----------



## TKausL (8. Dez 2012)

Über *args*


----------



## WinterMensch (8. Dez 2012)

```
class RecursiveSplit {

    public static void main (String[] args) {
    String s = String[] args;
    Out.println(s);
    
    
    
    }

}
```

Was ist denn jetzt daran falsch? Ich möchte den Kommandozeilenparameter dem String s übergeben und dann einfach nur am Bildschirm ausgeben.


----------



## TKausL (8. Dez 2012)

```
String s = String[] args;
```

args IST bereits ein String-Array...
Außerdem kann ein String-Array (String[]) nicht in ein String reingequetscht werden.


```
class RecursiveSplit {
 
    public static void main (String[] args) {
    for(String arg : args){
        Out.println(arg);
    }
    }
 
}
```


----------



## WinterMensch (8. Dez 2012)

Ok, gut, also ich habe ich jetzt das hier:


```
class RecursiveSplit {

    public static void main (String[] args) {
    for(String input : args){
        Out.println(input);
    }
    String rekursiv;
    Out.println(neu);
    
    }


public String rekursiv (String input) {
    if (input.length() <= 3) {
        return input;
    }
    
    String affix = input.substring(input.length() - 3);
    String prefix = input.substring(0, input.length() - 3);
    
    String neu = affix + rekursiv (prefix);
    return neu;
}

}
```


Als Fehlermeldung bekomme ich noch, dass er neu nicht finden kann.
Hab jetzt schon mehreres ausprobiert, aber der fehler bleibt da....


----------



## TKausL (8. Dez 2012)

Ich denke du solltest dir nochmal die GrundGrundGrundlagen angucken, z.B. wie man Methoden aufruft. Das was du da tust ist nämlich müll.


----------

