1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Größe eines Strings in Java definieren

Dieses Thema im Forum "PHP & Co." wurde erstellt von Aaron_Horowitz, 27.03.07.

  1. Aaron_Horowitz

    Dabei seit:
    19.01.07
    Beiträge:
    116
    Beim herumexperimentieren mit einem Java Programm, welches die in zwei Arrays eingelesen Daten in eine Textdatei schreiben soll, bin ich auf folgendes Problem gestoßen:

    Thomas 12
    Christian 14
    Uwe 10
    Andreas 15

    Die Stelle, wo die Zeiten ausgegeben werden hängt immer von der Länge des Strings ab, so dass die Zeiten nur dann exakt untereinander stehen, wenn die Namen zufällig die selbe Länge haben!

    Um diesen ästhetischen Mangel zu beheben, müsste man dem String eine bestimmte Größe bzw. eine genaue Anzahl der Zeichen inc. Leerstellen zuweisen.
    Weiß jemand ob und wie das geht? Gibt es vielleicht auch eine andere Lösung?

    Zum exakteren Verständnis des Problems, poste ich hier noch den Code:
    Code:
    package streams;
    
    import java.io.*;
    import java.util.Scanner;
    
    public class In_Dateien_schreiben_2
    {
    	public static void main(String[] args)
    										throws IOException
    	{
    		// Ausgabestream und Verknüpfung mit der Datei
    		
    		FileWriter dateiStream = new FileWriter("test2.txt")
    		
    		PrintWriter ausgabe = new PrintWriter(dateiStream);
    		
    		// Verschiedene Daten zum Testen 
    		
    		Scanner sc = new Scanner(System.in);
    		String[] namen = new String[4];
    		int[] zeiten = new int[4];
    		int i;
    		
    		for (i=0; i<=3; ++i)
    		{	
    			System.out.print("Geben Sie den " + (i+1) + ". Namen ein: ");
    			namen[i] = sc.next();
    			System.out.print("Bitte Zeit eingeben: ");
    			zeiten[i] = sc.nextInt();
    			
    	
    		}
    		
    		// Daten ausgeben
    		
    		System.out.println("Name                  Zeit");
    		for (i=0; i<=3; ++i)
    		{
    			System.out.println(namen[i] + "                 " + zeiten[i]);
    		}
    		
    		
    		// Daten in Datei schreiben
    		
    		ausgabe.println("Name                               Zeit");
    		for (i=0; i<=3; ++i)
    		{
    			ausgabe.println(namen[i] + "                    " + zeiten[i]);
    			
    		}
    		
    		ausgabe.close();
    		
    	}
    }
    
    
    Bis auf den oben beschriebenen ästhetischen Mangel läuft das Programm einwandfrei.

    Vielen Dank im Voraus!!!
     
  2. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Zunächst mußt Du Deine Namen durchsuchen und die Länge des längsten feststellen.
    Anschöießend mußt Du bei der Ausgabe jeden Namens soviele Leerzeichen anhängen, wie nötig sind, um diese Länge zu erreichen.
    Alternativ: Gibt es nicht ein printf in Java?
     
  3. MacMark

    MacMark Biesterfelder Renette

    Dabei seit:
    01.01.05
    Beiträge:
    4.709
    #3 MacMark, 27.03.07
    Zuletzt bearbeitet: 27.03.07
  4. MacMark

    MacMark Biesterfelder Renette

    Dabei seit:
    01.01.05
    Beiträge:
    4.709
    Ja: PrintStream.printf()
    System.out ist beispielsweise ein PrintStream.
     
  5. Aaron_Horowitz

    Dabei seit:
    19.01.07
    Beiträge:
    116
    Klingt gut, ich werds gleich mal ausprobieren!

    Vielen Dank schonmal!!!:)
     
  6. Aaron_Horowitz

    Dabei seit:
    19.01.07
    Beiträge:
    116
    Hab die String-Formatierung gerade mit einem kleinen Beispiel ausprobiert:
    Code:
    ackage streams;
    import java.util.Scanner;
    import java.lang.*;
    
    public class Strings_formatieren
    {
    	public static void main(String[] args)
    	{
    		String name1;
    		String name2;
    		
    		int zahl1;
    		int zahl2;
    		
    		String.format(20, name1, name2);
    		
    		Scanner sc = new Scanner(System.in);
    		
    		System.out.println("Name 1 eingeben :");
    		name1=sc.next();
    		System.out.println("Zahl 1 eingeben :");
    		zahl1=sc.nextInt();
    		System.out.println("Name 2 eingeben :");
    		name2=sc.next();
    		System.out.println("Zahl 2 eingeben :");
    		zahl2=sc.nextInt();
    		
    		System.out.println(name1 + " " + zahl1);
    		System.out.println(name2 + " " + zahl2);	
    	}
    
    }
    
    
    Wie genau muss ich den den String formatieren, so dass er 20 Zeichen lang ist. Mit
    String.format(20, name1, name2); hat´s leider nicht geklappt.
     
  7. MacMark

    MacMark Biesterfelder Renette

    Dabei seit:
    01.01.05
    Beiträge:
    4.709
  8. stk

    stk Grünapfel

    Dabei seit:
    05.01.04
    Beiträge:
    7.141
    Moin,

    keine Ahnung, meine Java Kenntnisse beschränken sich hierauf:
    [​IMG]

    :p

    Gruß Stefan
     
  9. MacMark

    MacMark Biesterfelder Renette

    Dabei seit:
    01.01.05
    Beiträge:
    4.709
    System.out.println(String.format("%1$30s %2$35s", name1, name2));

    Das müßte name1 rechtsbündig mit einer Breite von 30 Zeichen ausgeben, dann ein Leerzeichen einfügen und dann name2 rechtsbünding mit einer Breite von 35 Zeichen ausgeben.
    Und mit linksbündigen Spalten so:
    String.format("%1$-30s %2$-35s", name1, name2);

    Das Schema ist
    %[argument_index$][flags][width][.precision]conversion

    Siehe
    http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html#summary
     
  10. Aaron_Horowitz

    Dabei seit:
    19.01.07
    Beiträge:
    116
    Herzlichen Dank für die konkrete Hilfe!!!
     
  11. MacMark

    MacMark Biesterfelder Renette

    Dabei seit:
    01.01.05
    Beiträge:
    4.709
    Funktioniert es denn bei Dir jetzt?
     
  12. Mighty-M@ck

    Mighty-M@ck Jonagold

    Dabei seit:
    02.03.06
    Beiträge:
    20
    Hi Leute,

    ich nutze für sowas immer gerne die StringUtils von Apache (commons-lang-2.x.jar) - hier die API http://jakarta.apache.org/commons/lang/api-release/index.html. Die bietet jede Menge Funktionalität für den Umgang mit Strings ... und das beste: alles völlig null-safe.

    Das Auffüllen eines Strings geht beispielsweise mit leftPad/rightPad:
    Code:
    StringUtils.rightPad("Hallo Welt", 20)
    -> "Hallo Welt__________" (ich kann keine 10x Space machen, die werden auf ein Space getrimmt. Das __________ steht für 10x Space. :))

    bzw:
    Code:
    StringUtils.rightPad("Hallo Welt", 20, ".")
    -> "Hallo Welt.........."
     
  13. pepi

    pepi Cellini

    Dabei seit:
    03.09.05
    Beiträge:
    8.741
    Und was machst Du dann mit dem String? :) Ich würde ein removeStringFromObject() nehmen.
    Gruß Pepi
     
  14. stk

    stk Grünapfel

    Dabei seit:
    05.01.04
    Beiträge:
    7.141
    Moin,

    No comment. Das besprech' ich bestenfalls noch mit meiner Frau :p

    Gruß Stefan
     
  15. pepi

    pepi Cellini

    Dabei seit:
    03.09.05
    Beiträge:
    8.741
    Wobei sicherlich nicht nur Sie darauf gespannt auf die Erklärung ist wie Du zum String einer anderen Dame gekommen bist. :p
    Gruß Pepi
     
  16. Aaron_Horowitz

    Dabei seit:
    19.01.07
    Beiträge:
    116
    Ja, genauso funktioniert´s!:) Herzlichen Dank für die Hilfestellung!!!
     
    MacMark gefällt das.

Diese Seite empfehlen