StringBuilder initialisieren und Löschbefehl

javastartup

Mitglied
hallo!
Ich möchte aus einem Array etwas auslesen lassen
Bsp:

Max Mustermann (31)
Doris Musterfrau (32)

klappt so weit auch aber mein Problem ist das nach der letzten ausgabe auch ein Zeilenumbruch erfolgt, der nicht erfolgen soll.

Wie kann ich den verhindern?
Geht das nur mit einem StringBuilder?
Wenn ja? Wie initialisier ich einen StringBuilder und passe den der String to String ausgabe an?

Grüße und Danke für die Hilfe
 
N

nillehammer

Gast
Es läuft bei allen Varianten darauf hinaus, dass Du beim Iterieren immer schauen musst, ob Du gerade das letzte Element zu fassen hast. D.h. die neue Schreibweise zum Iterieren (die mit dem : ) kannst Du nicht benutzen. Beim Iterieren über Collections machst Du es mit einem Iterator und prüfts mit hasNext, beim Iterieren über Arrays mit einer index Variablen und prüfst, ob sie kleiner length-1 ist. Anhand dessen entscheidest Du dann, ob Du System.out.println oder nur System.out.print aufrufst, +"\n" machst, append("\n"); aufrufst oder wie auch immer Du Deinen output generierst.
 

javastartup

Mitglied
hier ist der code:

public String toString() {
String str = "Abteilung " + getName()+":" + "\n";
for (Angestellter angestellter : angestellte) {
str += "- " + angestellter.getVorname() + " "
+ angestellter.getNachname() + "("
+ angestellter.getAlter() + ")"+"\n";
}
return str;


und nochmal meine konkrete Frage:
In der letzten Zeile führe ich mit \n einen Umbruch durch aber der erfolgt ja auch bei Ausgabe des letzten Namens...
Wie kann ich das verhindern?
Danke
 
N

nillehammer

Gast
Nochmal meine Antwort: Du kannst nicht mit der Doppelpunkt-Schreibweise iterieren, weil Du dabei nicht erkennst, ob Du das letzte Element zu fassen hast. Du musst mit einer index-Variablen arbeiten.
[Java]
for (int i=0; i<angestellte.length; i++) {
final Angestellter antestellter = angestellte;
... der ganze Outputkram außer dem letzten +"\n"
// Das letze "\n" nur adden, wenn nicht letztes Element
if (i < angestellte.length-1)
str+= "\n";
}
[/Java]
Immer schön [Java]-Tags benutzen, gell :D
 
Zuletzt bearbeitet von einem Moderator:

chalkbag

Bekanntes Mitglied
Java:
public String toString() {
		String str = "Abteilung " + getName()+":" + "\n";
		for (Angestellter angestellter : angestellte) {
			str += "- " + angestellter.getVorname() + " "
					+ angestellter.getNachname() + "("
					+ angestellter.getAlter() + ")"+"\n";
		} 
		return str;

Obwohl im Themenbetreff erwähnt, sehe ich hier auch den Stringbuilder nicht, aber genau der würde bei sowas Sinn machen :bae:
 
N

nillehammer

Gast
Was mir in dem Zusammenhang gerad einfällt, nachdem Du das ja in der toString-Methode benutzt, die ja im wesentlichen für Log-ausgaben gedacht ist, schau Dir mal commons-lang von Apache an und benutze deren ToStringBuilder. Der erzeugt eine Ausgabe, die mehr oder weniger so aussieht, wie das was Du Dir hier mühsam zusammen baust.
 

bERt0r

Top Contributor
Für dein Beispiel lässt sich das ganze relativ einfach lösen:
Java:
public String toString() {
String str = "Abteilung " + getName()+":";  //mal das erste \n weglassen

for (Angestellter angestellter : angestellte)
 {
str +="\n";           //und pro neuen Angestellten am Anfang in die nächste Zeile
str += "- " + angestellter.getVorname() + " "
+ angestellter.getNachname() + "("
+ angestellter.getAlter() + ")";       //dieses \n brauchen wir auch nicht
}
return str;
 

javastartup

Mitglied
ich muss die Klasse durch nen Test jagen und der ist immernoch nicht mit der Ausgabe zufrieden....

Gibt es noch ne andere Möglichkeit beispielsweise mit nem Stringbuilder und dem Befehl delete?
Wenn ja wie müsste das dann aussehen oder kann mir jemand einen Link für ein StringBuilder Beispiel geben?

Grüße
 
N

nillehammer

Gast
[Java]
// StringBuilder mit dem ersten String vorbelegt erzeugen
final StringBuilder output = new StringBuilder("Abteilung ");
// Alle weiteren Strings mit "append" hinzufügen (im prinzip wie + bei normalen Strings)
output.append(getName());
output.append(":\n");
.....
// Am Ende die toString-Methode des builders aufrufen, um an das Resultat heranzukommen.
return output.toString();
[/Java]
 

javastartup

Mitglied
ich hab jetzt folgenden Code:

Java:
public String toString() {
		final StringBuilder output = new StringBuilder("Abteilung ");
		output.append(getName() + ":" + "\n");
		for (int i = 0; i < angestellte.size(); i++) {
			for (Angestellter angestellter : angestellte) {
				output.append("- " + angestellter.getVorname() + " "
						+ angestellter.getNachname() + "("
						+ angestellter.getAlter() + ")" + "\n");
				if (i < angestellte.size() - 1) {
					output.append("\n");
				}
			}
		}
		return output.toString();

[\JAVA]


und bei der Testausgabe erhalte ich folgenden Fehler:

expected:<... Max Mustermann(31)
    [junit] [- Hanne Lore(25)]> but was:<... Max Mustermann(31)
    [junit] [
    [junit] - Hanne Lore(25)
    [junit] 
    [junit] ]>

viell. seh ich vor lauter bäumen den wald nicht...aber ich kann mir nicht mal den Fehler erklären:-(
Grüße und Danke schonmal im Vorraus
 

nrg

Top Contributor
warum 2 for-schleifen? warum überschreibst du nicht einfach in der klasse Angestellter auch die toString? meinst du es ist der sinn von einem StringBuilder, die Strings trotzdem noch mit + zusammenzubasteln ;)?
 

javastartup

Mitglied
ich bin so verwirrt grad das ich gar nichts mehr checke


und wie greife ich dann auf einen explziten angestellten zu wenn ich die 2te for-schleife weglasse?
 
Zuletzt bearbeitet:

nrg

Top Contributor
mal so in browser getippt (muss nicht sein, dass es kompilier ;)):

Abteilung:
Java:
	@Override
	public String toString() {
		final StringBuilder output = new StringBuilder("Abteilung ");
		output.append(name).append(':');
		for (Angestellter angestellter : angestellte) {
			output.append('\n').append(angestellter);
		}
		return output.toString();
	}

Angestellter:
Java:
	@Override
	public String toString() {
		final StringBuilder output = new StringBuilder(vorname);
		return output.append(' ').append(nachname).append('(').append(alter).append(')').toString();
	}

edit:
und wie greife ich dann auf einen explziten angestellten zu wenn ich die 2te for-schleife weglasse?

das ist eine for-each schleife.

hier eine normale for:
Java:
for (int i = 0; i < größe; i++) {
	// zugriff über index durch i
}

und hier die for-each (bei einem String-array):
Java:
for (String s : deinArray) {
	// zugriff direkt über s (in jedem durchlauf wird der wert von der aktuellen position in s gepackt)
}

ich nehm eigentlich immer eine for-each, ausser ich brauch einen zähler.
 
Zuletzt bearbeitet:

javastartup

Mitglied
das mit der Schleife hab ich verstanden danke!!!!
Aber ich muss ja dann beide Lösungen für Angestellter und für Abteilung miteinander verknüpfen um die in eine String to String Methode zu kriegen oder nicht? und in deiner angestellten methoder erkennt er die Variablen vorname usw. nicht die adressier ich dann mit

angestellter.vorname()
oder nicht?
 
N

nillehammer

Gast
nrg hat gesagt.:
ich nehm eigentlich immer eine for-each, ausser ich brauch einen zähler.
Das ist meistens auch besser, weil einfacher. So hatte javastartup es am Anfang auch. In der Ursprungsfrage war aber das Problem, dass er das letzte Element der Iteration anders behandeln wollte als die anderen (kein \n mehr anfügen). Deswegen hatte ich ihm geraten, die traditionelle Iteration mit index-Variable zu nutzen.

javastartup hat gesagt.:
und wie greife ich dann auf einen explziten angestellten zu wenn ich die 2te for-schleife weglasse?
Mit dem index kannst Du den angestellten aus dem Array holen. Wie das geht, siehe mein Post von heute Heute 18:05 Zeile 2.
 

nrg

Top Contributor
Aber ich muss ja dann beide Lösungen für Angestellter und für Abteilung miteinander verknüpfen um die in eine String to String Methode zu kriegen oder nicht?
nein, das ist eigentlich alles, was du brauchst. rufst du auf eine instanz von Abteilung die toString auf, wird ja in zeile 6 die toString von dem angestellten (der gerade in der iteration an der reihe ist) aufgerufen.

und in deiner angestellten methoder erkennt er die Variablen vorname usw. nicht die adressier ich dann mit
keine ahnung, wie deine members heissen. die musst du halt ggf. korrigieren. ich persönlich mache das nicht, intern getter zu verwenden.
 
N

nillehammer

Gast
das mit der Schleife hab ich verstanden danke!!!!
Aber ich muss ja dann beide Lösungen für Angestellter und für Abteilung miteinander verknüpfen um die in eine String to String Methode zu kriegen oder nicht? und in deiner angestellten methoder erkennt er die Variablen vorname usw. nicht die adressier ich dann mit

angestellter.vorname()
oder nicht?
Das Charmante an nrg's Ansatz ist, dass die Erstellung der String-Repräsentation von Angestellter dort gemacht wird, wo sie hingehört, nämlich in die Klasse Angestellter. Dadurch kannst Du dir in der toString-Methode der Abteilung den Zugriff auf die Felder (name, alter...) der Angestellten komplett sparen. Du musst in der Schleife, in der Du über die Angestellten iterierst dann (wie schon beschrieben) nur noch folgendes machen:
Java:
output.append(angestellter);
 
Zuletzt bearbeitet von einem Moderator:

javastartup

Mitglied
Dankeschön für eure Mühe:)

Funktioniert jetzt musste nur nochwas ändern weil bei der Angestelltenklassen-Ausgabe ne andere Darstellung erwartet wurde, als bei der Abteilungdarstellung aber passt alles!
Danke für die ausführliche Erklärung das hilft mir auch für die zukünftigen bearbeitungen weiter...ich finde es jedoch fragwürdig das wort charmant in bezug mit java zu nennen:D

Danke nochmal!!!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
sserio StringBuilder und Strings Java Basics - Anfänger-Themen 8
Kotelettklopfer Stringbuilder mit print ausgeben Java Basics - Anfänger-Themen 83
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
P Methode trim() ohne StringBuilder Java Basics - Anfänger-Themen 1
P Stringbuilder richtig einsetzen Java Basics - Anfänger-Themen 1
W Teilstring durch Teilstring mittels StringBuilder ersetzen Java Basics - Anfänger-Themen 7
P Schleife für insert() und delete() im StringBuilder in Verbindung mit indexOf() Java Basics - Anfänger-Themen 7
G Wozu ist die Methode offsetByCodePoints(int, int) beim StringBuilder sinnvoll? Java Basics - Anfänger-Themen 1
G Wie kann ich einem StringBuilder einen int Wert formatiert hinzufügen? Java Basics - Anfänger-Themen 8
G Gibt es eine Methode die bei einem StringBuilder n mal das Zeichen c hinzufügt? Java Basics - Anfänger-Themen 6
G StringBuilder .setLength Methode wirkungslos? Java Basics - Anfänger-Themen 2
F StringBuilder: Zeilenumbruch nach x Zeichen ohne Worttrennung Java Basics - Anfänger-Themen 1
K StringBuilder Objekt überschreiben - Speicherverbrauch Java Basics - Anfänger-Themen 3
R [Erledigt]Fehler beim löschen von einzelnen Buchstaben aus StringBuilder Java Basics - Anfänger-Themen 1
H Suche Vergleichstabelle für die Klassen String und StringBuilder Java Basics - Anfänger-Themen 1
R Frage zum StringBuilder Java Basics - Anfänger-Themen 7
F Scanner + Stringbuilder geben leeren String aus wenn Umlaute enthalten sind Java Basics - Anfänger-Themen 29
M Array erweitern ohne Stringbuilder Java Basics - Anfänger-Themen 6
E StringBuilder.delete Problem Java Basics - Anfänger-Themen 2
J StringBuilder / String zusammensetzen Java Basics - Anfänger-Themen 2
A Datentypen Stringbuilder vollständig leeren Java Basics - Anfänger-Themen 6
F Problem bei StringBuilder Methoden Java Basics - Anfänger-Themen 11
C String oder StringBuilder? Java Basics - Anfänger-Themen 13
Java-Insel StringBuilder Zeilenumbrüche erkennen Java Basics - Anfänger-Themen 3
L StringBuilder Probleme in einer Klasse Java Basics - Anfänger-Themen 4
S im StringBuilder Zeichenketten ersetzen Java Basics - Anfänger-Themen 6
M Gittermuster mit Stringbuilder und einfacher Schleife erstellen Java Basics - Anfänger-Themen 19
B Stringbuilder verwenden Java Basics - Anfänger-Themen 15
L StringBuilder OutOfMemoryError Java Basics - Anfänger-Themen 8
S StringBuilder Java Basics - Anfänger-Themen 13
J Strings und StringBuilder Java Basics - Anfänger-Themen 12
K StringBuilder notwendig ab wann? Java Basics - Anfänger-Themen 42
H Array + StringBuilder in eine Textdatei speichern.laden. Java Basics - Anfänger-Themen 7
D StringBuilder Java Basics - Anfänger-Themen 10
N String oder StringBuffer/StringBuilder Java Basics - Anfänger-Themen 6
T Standardkonstruktor, Attribute initialisieren Java Basics - Anfänger-Themen 5
Lion.King Array deklarieren und initialisieren Java Basics - Anfänger-Themen 5
M Variable in einer Schleife initialisieren Java Basics - Anfänger-Themen 46
M Wie lassen sich Objektkonstanten initialisieren, wenn sie eine Bedingung erreichen? Java Basics - Anfänger-Themen 6
R Ein Multidimensionales String Array initialisieren und Deklarieren Java Basics - Anfänger-Themen 2
F Initialisieren eines Web-Mp3 Players in Tabs durch "booleans" erst wenn Tab geöffnet wird ...? Java Basics - Anfänger-Themen 1
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
J Ist es möglich einen int Array wirklich leer zu initialisieren oder zu füllen? Java Basics - Anfänger-Themen 21
C Arrays - deklarieren, initialisieren? Ist das ein Objekt? Java Basics - Anfänger-Themen 3
I Wo am besten eine String Konstante initialisieren? Java Basics - Anfänger-Themen 5
X Attribut initialisieren Java Basics - Anfänger-Themen 1
M Deklarieren und Initialisieren von Arrays Java Basics - Anfänger-Themen 3
Dawinartor Erste Schritte Statisch, Initialisieren, Deklarieren, ... Java Basics - Anfänger-Themen 1
L Variable in If-Statement initialisieren Java Basics - Anfänger-Themen 4
C Verschachteltes Array initialisieren Java Basics - Anfänger-Themen 6
D Vektoren Initialisieren Java Basics - Anfänger-Themen 1
D Boolean Array initialisieren Java Basics - Anfänger-Themen 4
T Mehrdimensionale Arrays mit geschachtelter for-Schleife initialisieren Java Basics - Anfänger-Themen 14
J Array ausserhalb der Methode initialisieren Java Basics - Anfänger-Themen 4
b1ck Integer initialisieren bei do-while-Schleife Java Basics - Anfänger-Themen 11
M Java Arrays mit Werten initialisieren Java Basics - Anfänger-Themen 3
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
V Tastatur initialisieren JFrame Probleme Java Basics - Anfänger-Themen 6
L Arrays richtig initialisieren Java Basics - Anfänger-Themen 1
W Klassen [GELÖST] Objekte während der Laufzeit mit neuen veränderten Werten beliebig oft initialisieren Java Basics - Anfänger-Themen 2
B Rekursion - Variable initialisieren Java Basics - Anfänger-Themen 2
T Variable deklarieren, ohne zu initialisieren... Java Basics - Anfänger-Themen 3
M Objekt Array an konstruktor übergeben und Initialisieren Java Basics - Anfänger-Themen 1
K Objekte im Konstruktor initialisieren Java Basics - Anfänger-Themen 3
CyberFish initialisieren, obwohl es gemacht wurde! Bitte um Hilfe Java Basics - Anfänger-Themen 10
K Array mit Double initialisieren Java Basics - Anfänger-Themen 10
J statische Methoden auf eine LinkedList initialisieren? Java Basics - Anfänger-Themen 5
B Frage zur Effizienz - alle Array-Felder initialisieren oder jedes Feld auf null prüfen? Java Basics - Anfänger-Themen 4
M Mehrdimensionales Array initialisieren Java Basics - Anfänger-Themen 3
DerGroßeNargus Doppelte Liste initialisieren Java Basics - Anfänger-Themen 2
R Sehr einfache möglichkeit ArrayList oder Array zu initialisieren? Java Basics - Anfänger-Themen 8
N Mit Kontrukor der Oberklasse lokale Variable initialisieren Java Basics - Anfänger-Themen 2
darekkay Datentypen HashSet bzw. LinkedList mit Werten initialisieren Java Basics - Anfänger-Themen 3
S Mehrdimensionales Char-Array initialisieren Java Basics - Anfänger-Themen 17
S mögliche Fehler beim Initialisieren von Variablen Java Basics - Anfänger-Themen 19
C Zweidimensionales String Array initialisieren Java Basics - Anfänger-Themen 2
D List<String[]> initialisieren Java Basics - Anfänger-Themen 4
D Problem mit Objekten Vererbung deklarieren initialisieren usw Java Basics - Anfänger-Themen 12
B Arrays initialisieren Java Basics - Anfänger-Themen 2
S Variable Initialisieren, aber wo? Java Basics - Anfänger-Themen 36
Y Array initialisieren, nach der Abfrage? Java Basics - Anfänger-Themen 3
K Datentypen Globale Variable direkt initialisieren oder im Konstruktor? Java Basics - Anfänger-Themen 13
N ARRAY initialisieren Java Basics - Anfänger-Themen 5
T Mehrere Variablen gleichzeitig initialisieren Java Basics - Anfänger-Themen 2
F Dreidimensionales Array? Wie initialisieren? Java Basics - Anfänger-Themen 5
Forlan OutputStream Initialisieren Java Basics - Anfänger-Themen 4
Ham Verhalten beim Initialisieren von Arrays Java Basics - Anfänger-Themen 16
N Initialisieren einer zufälligen Matrix Java Basics - Anfänger-Themen 12
A log4j - wie kann ich im Quellcode initialisieren statt in der properties-Datei? Java Basics - Anfänger-Themen 2
G Variablen initialisieren vor super() Java Basics - Anfänger-Themen 8
J ArrayLists initialisieren Java Basics - Anfänger-Themen 21
S Array initialisieren Java Basics - Anfänger-Themen 8
MQue ArrayList initialisieren Java Basics - Anfänger-Themen 17
G GUI in main Initialisieren Java Basics - Anfänger-Themen 15
M 2d string array initialisieren ohne neu String Java Basics - Anfänger-Themen 3
B Variable mit Methode initialisieren Java Basics - Anfänger-Themen 11
A char variable deklarieren und nicht initialisieren Java Basics - Anfänger-Themen 10
S statische variable initialisieren mit exception Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben