# args[0] auf Anzahl Zeichen überprüfen



## babuschka (3. Dez 2009)

Hallo,
das habe ich probiert :rtfm:


```
if(args[0].length <= 2){
	    Out.println(args[0]);
	}
	else{
	    Out.println("groesser als zwei Zeichen");
	}
```

so wie es aussieht, ist das falsch


----------



## The_S (3. Dez 2009)

```
if(args[0].length() <= 2){
	    Out.println(args[0]);
	}
	else{
	    Out.println("groesser als zwei Zeichen");
	}
```


----------



## babuschka (3. Dez 2009)

nur die zwei Klammern!? ^^

warum?


----------



## The_S (3. Dez 2009)

Weil length() eine Methode von String ist, und length ein "Attribut" eines Arrays.


----------



## KrokoDiehl (3. Dez 2009)

Weil 
	
	
	
	





```
args[0]
```
 ein String ist, und Strings haben die Methode 
	
	
	
	





```
length()
```
.
wenn du 
	
	
	
	





```
args.length
```
 machst, geht es ohne die Klammern, weil das _length _hier keine Methode, sondern ein öffentliches Attribut des Arrays ist.


----------



## babuschka (3. Dez 2009)

da hätte ich noch eine frage.

ich will den letzten Buchstaben ausgeben aus args[0]


```
Out.println(args[0].charAt(args.length -1);
```


```
Out.println(args[0].charAt(args[0].length()-1);
```

beides geht irgendwie net


----------



## The_S (3. Dez 2009)

Ich glaube du solltest dir noch einmal etwas über Arrays durchlesen. Du hast da extremen Nachholbedarf.


```
Out.println(args[0].charAt(args[0].length() - 1));
```


----------



## babuschka (3. Dez 2009)

danke! 

jaja, die Arrays


----------



## w0ddes (3. Dez 2009)

noise hat gesagt.:


> da hätte ich noch eine frage.
> 
> 
> 
> ...



Der Code war ja richtig bis auf eine vergessene Klammer ")" am Ende! =/ Der restliche Aufruf stimmt.


----------



## babuschka (3. Dez 2009)

Ich bins wieder ^^
Brauche doch eure hilfe noch mal.
Ich weiß, dass es "nix" mehr mit meiner eigentlichen Frage zutun hat. 

Ich wollte jetzt probieren den ersten buchstaben zu verschieben!
Da habe ich im Buch(Sprechen Sie Java? 3 Auflage) das gefunden.

b.replace(from, to, "abc");
ersetzt b[from..to[durch "abc"


```
args[0].replace(args[0].charAt(args[0].length()-1),args[0].charAt(args[0].length()-1),"args[0].charAt(0)");
```


----------



## faetzminator (3. Dez 2009)

Was ist nun deine Frage?


----------



## babuschka (3. Dez 2009)

also ich will eigentlich den ersten und den zweiten Buchstaben(Zeichen) an das ende verschieben.

Test
soll dann ergeben
stTe

Bitte nicht gleich lösung rein ^^ Muss mich selber abrackern ^^


```
args[0].replace(args[0].charAt(args[0].length()-1),args[0].charAt(args[0].length()-1),"args[0].charAt(0)");
```
Ist das wenigsten fast richtig?


----------



## faetzminator (3. Dez 2009)

öhm, replace erwartet zwei chars und nicht zwei chars und einen String...
Aber wenn, warum dann nicht mit Regex  ? 
	
	
	
	





```
args[0].replaceAll("^(..)(.*)$", "$2$1");
```


----------



## babuschka (3. Dez 2009)

aber der Ausdruck  "args[0].charAt(0)" verweist doch auf ein Zeichen?! oder nicht
replaceall kenne ich net ^^ steht irgendiwie net im buch. Muss doch auch irgenwie so gehen?

gruß


----------



## faetzminator (3. Dez 2009)

replace() ersetzt einfach alle Vorkommnisse eines Buchstabens durch einen anderen, shiften kannst du da überhaupt nichts... Wenn schon, solltest du dir substring() anschauen...


----------



## w0ddes (3. Dez 2009)

mit replace() kann man, wie der Name schon sagt, nur ersetzen und nicht verschieben. Hilfreich ist sicher, wie schon genannt, substring().

Schau mal hier: String (Java Platform SE 6)


----------



## babuschka (3. Dez 2009)

mit substring() steht hier auch was im buch ^^
ich werde das jetzt die tage ausprobieren und mich dann melden 
Arbeit ruft ;(


----------



## w0ddes (3. Dez 2009)

Viel Erfolg! 
Und so schwer ist das nicht


----------



## Frix (3. Dez 2009)

noise hat gesagt.:


> also ich will eigentlich den ersten und den zweiten Buchstaben(Zeichen) an das ende verschieben.



Ich würde die Lösung mit den Regulären Ausdrücken bevorzugen, sie sind aber nicht immer schnell zu lesen.
Aber wie schon erwähnt - substring Rockt

Beispiel

```
public class Main {
	public static void main(String[] args) {
		String word = "abc";
		String res = word.substring(2) + word.charAt(0) + word.charAt(1);
		System.out.println(res);
	}
}
```

Resultat: "cab"


----------



## faetzminator (3. Dez 2009)

Also wenn mein einfacher Regex nicht einfach zu lesen ist - naja, die einen bevorzugen [c](.{2})[/c] statt [c](..)[/c], meiner ist aber kürzer. Abgesehen davon muss man sich da nicht um ArrayIndexOutOfBoundException's etc kümmern.


----------



## Frix (3. Dez 2009)

Klar, war auch nur nen alternatives Beispiel


----------



## w0ddes (3. Dez 2009)

faetzminator hat gesagt.:


> Also wenn mein einfacher Regex nicht einfach zu lesen ist



Einfach? Also ich als Einsteiger versteh da nur Bahnhof


----------



## Frix (3. Dez 2009)

Ich stimm da faetzminator voll zu. Reguläre Ausdrücke sind ne feine Sache und ich würde auch jeden empfehlen, ihre Funktionsweise zu erlernen.

Beispiel:
Der Klassiker, Emailadressen prüfen (ich hab jetzt den erst beste gegriffen):
^([ _a-zA-Z0-9-]+)(\.[a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$

Wer das mit String Operationen abbilden will, ist erst mal ne weile lang beschäftigt. Mit regulärem Ausdrücke brauch man 1 Zeile. Per Hand, vielleicht so um die 20. Und wehe, man macht in den 20 Zeilen einen Logikfehler. Dann fängt man wieder von vorne an.


----------



## faetzminator (3. Dez 2009)

Frix, das ist aber eindeutig nicht der offizielle Regex für Mailaddressen-Checks  der hier wärs:

```
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b
\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*
[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-
\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
```


----------



## Frix (3. Dez 2009)

^^


----------



## babuschka (9. Dez 2009)

```
args[0] = args[0].substring(args[0].charAt(1), args[0].charAt(args[0].length()-1));
```

Müsste das nicht den ersten Buchstaben ans ende verschieben?


----------



## javimka (9. Dez 2009)

charAt() gibt doch einen char zurück, den du hier als int interpretierst. Falls ein a an zweiter Stelle (charAt(1)) steht, wäre das 97, für b 98 usw. Dein String ist wahrscheinlich gar nicht so lang. Um den ersten Buchstaben ans Ende zu schieben könttest du schreiben:
[c]args[0] = args[0].substring(1,args[0].length())+args[0].charAt(0);[/c]


----------



## babuschka (9. Dez 2009)

ja irgendwie hat auch ausgegeben, dass etwas wohl zu kurz ist! ^^


----------



## babuschka (9. Dez 2009)

danke jetzt geht das ^^
was passiert da im einzellen in diesem ausdruck, weil ich das irgendwie noch nicht richtig verstehe. Ja ich weiß er verschiebt ^^


----------



## javimka (9. Dez 2009)

mit substring schneide ich den Teil vom zweiten Buchstaben bis zum letzten Buchstaben aus. Dann hänge ich den ersten Buchstaben daran, den ich mit charAt(0) erhalte.


----------

