Größe eines Strings in Java definieren

Registriert
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!!!
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
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?
 
Registriert
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.
 

stk

Grünapfel
Registriert
05.01.04
Beiträge
7.141
Moin,

keine Ahnung, meine Java Kenntnisse beschränken sich hierauf:
get_string.jpg


:p

Gruß Stefan
 

MacMark

Jakob Lebel
Registriert
01.01.05
Beiträge
4.874
...
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.

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
 

Mighty-M@ck

Jonagold
Registriert
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.........."
 

pepi

Cellini
Registriert
03.09.05
Beiträge
8.740
Moin,
No comment. Das besprech' ich bestenfalls noch mit meiner Frau :p
Gruß Stefan
Wobei sicherlich nicht nur Sie darauf gespannt auf die Erklärung ist wie Du zum String einer anderen Dame gekommen bist. :p
Gruß Pepi