# String formatieren



## tyronm (20. Dezember 2007)

Hi,
eine Anfängerfrage.
ich möchte gerne eine Zeichenkette wie eine Zahl (Decimalformat) formatieren.
Also z.B. schon 10 Stellen vorgeben für Zeicehnkette mit der länge 4 nach dem Motto

"------Java"

Vielen Dank für eure Tipps


----------



## MiMi (20. Dezember 2007)

Dann schreib doch mal was du vorhast, weil ich versteh diene Frage nicht so ganz. Und vielleicht solltest du uns deinen Code zeigen, wo du net weiterkommst.


----------



## tyronm (20. Dezember 2007)

Hi, 
Also 
z.B. bei zahlen kann man es ja so machen 
DecimalFormat df = new DecimalFormat("000000000");
df.format(6);
Ausgabe -> 000000006 

das gleiche wollte ich für eine Zeichenkette 
String s = "Java";

Ausgabe sollte lauten

"------Java" wobei "-" Leerzeichen bedeutet


----------



## Andron (20. Dezember 2007)

Ich würde sagen:


```
String wort="java";
String formatter="-----"
System.out.println(formatter+java);
```

Oder habe ich dein Problem falsch verstanden?


----------



## tyronm (20. Dezember 2007)

Hi,

nein klingt überhaupt nicht verkehrt so hatte ich es auch vor. Ich dachte nur es gibt eine elegantere Lösung. Vielen Dank nochmal für Dein Tipp


----------



## zeja (20. Dezember 2007)

Schöner ist:

```
String word="java";
String formattedWord = String.format("--------%s",word);
```

Formatierungselement sind Grundlegend wie in sprintf für C++.


----------



## tyronm (21. Dezember 2007)

Hi ,
ich verwende leider kein Java 5.0 Formatter geht also nicht. Die erste Idee ist leider nur eine konkatenation was mir kaum nützt. Ich suche so etwas wie DecimalFormat für Zeichenketten, die eine gegebene Zeichenkette automatisch auf die vorgegebene Anzahl an Stellen formattiert. Also wie ein Platzhalter. 
Platzhalter = "          " (10 Stellen)
String s = "JAVA" (4 Stellen)
Platzhalter.format(s) 
Ausgabe -> "      JAVA" (4 stellen druch "JAVA" besetzt + 6 leere Stellen)
ein kleiner Tipp diesbezüglich wäre sehr willkommen


----------



## MiMi (21. Dezember 2007)

Also mir wurde da nur einfallen, zu zaehlen wie lang der String ist, und solange der kleiner ist als ne vorgegebene Laenge ein Leerzeichen davor einzufuegen mittels while. Oder halt mit ner for schleife, so viele Leerzeichen wie noetig in einen String fuegen und den dann vor den andern String einfuegen.


----------



## zeja (21. Dezember 2007)

Such mal nach "sprintf java" es gibt da einige Implementierungen auch für Java 1.4 die du nutzen könntest.


----------



## tyronm (21. Dezember 2007)

Hi,
Danke für eure Tipps. Ich werde mich melden wenn es klappt.


----------



## Anime-Otaku (21. Dezember 2007)

MiMi hat gesagt.:


> Also mir wurde da nur einfallen, zu zaehlen wie lang der String ist, und solange der kleiner ist als ne vorgegebene Laenge ein Leerzeichen davor einzufuegen mittels while. Oder halt mit ner for schleife, so viele Leerzeichen wie noetig in einen String fuegen und den dann vor den andern String einfuegen.



Benutze bei dieser Lösung, aber bitte einen StringBuffer, da dieser für Stringoperationen gedacht ist und wesentlich schneller damit arbeitet (dort gibt es auch ein insert)


----------



## tyronm (21. Dezember 2007)

Hi,
habe jetzt eine Lösungsmöglichkeit und wollte es mit euch teilen.


```
String platzhalter = "                              "; // 30 Stellen
String s = "java"; // 4 Stellen
BigDecimal p = new BigDecimal(s.length());
BigDecimal c = new BigDecimal(platzhalter.length());
BigDecimal d = c.subtract(p);
int f = Integer.parseInt(d.toString());
String z = " "; // 1 Leerzeichen
String y = "";
for (int i = 0; i<f;i++){
	                                y = y+z;
                             }
String neu = y+s; // 30 Stellen (26 leer + Java)
```
Ist zwar bisschen rudimentär aber macht das was er soll 
Elegantere vorschläge sind willkommen.


----------



## Anime-Otaku (21. Dezember 2007)

Warum einfach wenns auch kompliziert geht oder wie?^^


```
StringBuffer result = new StringBuffer("java");
while (buffer.length()<30){
   result.insert(0," ");
}
```


----------



## deepthroat (21. Dezember 2007)

Hi.





Anime-Otaku hat gesagt.:


> Warum einfach wenns auch kompliziert geht oder wie?^^
> 
> 
> ```
> ...


Ja, apropos kompliziert... 

```
String res = String.format("%30s", "java");
```
Gruß


----------



## tyronm (21. Dezember 2007)

hi Anime,
Hammerkurze Sache. Hat aber nicht geklappt. 

```
StringBuffer result = new StringBuffer("java");
			StringBuffer buffer = new StringBuffer("                              ");
			System.out.println("buffer Länge=" + buffer.length());
			while (buffer.length()<30){   
					result.insert(0," ");
				} 
			System.out.println("resultlänge" + result.length());
```
woran liegt es?


----------



## MiMi (21. Dezember 2007)

@deepthroat
Haettest du den Thread gelesen, wuesstest du das er kein Java5 benutzt


----------



## deepthroat (21. Dezember 2007)

MiMi hat gesagt.:


> @deepthroat
> Haettest du den Thread gelesen, wuesstest du das er kein Java5 benutzt


Ah, den Beitrag habe ich wohl gepflegt überlesen. 

Alternativ:
	
	
	



```
String java = "java";
char[] s30 = new char[30 - java.length()];
Arrays.fill(s30, ' ');
String result = new String(s30) + java;
```
Gruß


----------



## Anime-Otaku (21. Dezember 2007)

tyronm hat gesagt.:


> hi Anime,
> Hammerkurze Sache. Hat aber nicht geklappt.
> 
> ```
> ...


Vielleicht, weil du Versuchst den Platzhalter-StringBuffer auf 30 Zeichen zu bringen(den wir eh nicht brauchen), anstatt den "java" String?


----------



## tyronm (21. Dezember 2007)

Hi deepthroat,
String.format ist ech eine coole Sache. Kann es leider nicht verwenden da ich kein java 5.0 habe


----------



## tyronm (21. Dezember 2007)

Hi Anime,
 Du hast völlig recht jetzt klappt es. Kann man doch einen Anfänger verzeihen oder


----------



## tyronm (21. Dezember 2007)

Hi Anime, 
noch eine kleine Frage.
Wie kriege ich es hin, dass die Zeichenkette  "Java"  linksbündig steht und die Leerzeichen rechts von der Zeichenkette gefüllt werden also:

```
"Java                          "
```


----------



## MiMi (21. Dezember 2007)

Bin zwar net Anime aber 
schau dir dazu die Methode insert aus der Klasse StringBuffer an. Dort siehst du was das

```
result.insert(0," ");
```
bedeutet und du kannst es leicht so drehen, das die Leerzeichen am Ende stehen.


----------



## tyronm (21. Dezember 2007)

Hi MiMi,

Danke für den Hinweis hat geklappt. Vielen Dank für euren Support ihr seit Klasse ;-)


----------



## takidoso (21. Dezember 2007)

also Ich habe für Javaumgebungen unter 5 folgendes Helferlein im Einsatz


```
public class StringHelper
{

    static public String padLeft(String input, int len)
    {
        StringBuffer strBuff = new StringBuffer(len);

        for (int i=0; i<len-input.length(); i++)
        {
            strBuff.append(' ');
        }

        strBuff.append(input);
        return strBuff.toString();
    }

    static public String padRight(String input, int len)
    {
        StringBuffer strBuff = new StringBuffer(len);

        strBuff.append(input);

        for (int i=0; i<len-input.length(); i++)
        {
            strBuff.append(' ');
        }

        return strBuff.toString();
    }

}
```


----------



## tyronm (21. Dezember 2007)

Hi takidoso,

ich finde deinen Ansatz die Funktionalität auf Methoden umzulagern ebenfalls sehr gut. Danke für Dein Tipp


----------

