StringBuilder und Strings

sserio

Bekanntes Mitglied
Hallo,
ich hätte eine Frage. Bei einem meiner Codes habe ich einen String mit dem Wert " " deklariert. Danach wurde mir aber ein String Builder empfohlen. Grundsätzlich habe ich keinen Unterschied entdeckt. Vielleicht kann mir ja jemand anders auf die Sprünge helfen, was sich hier verändert.
 

httpdigest

Top Contributor
java.lang.StringBuilder ist dazu da, um effizient aus mehreren einzelnen hintereinander konkatenierten Strings einen einzelnen String zu bauen, da bei einer "manuellen" String-Konkatenation via z.B. `String c = a+b;` (wobei die Strings `a` und/oder `b` keine Konstanten sind) immer ein neues String-Objekt gebaut wird. Der javac Compiler ist hier allerdings schon sehr intelligent und kann bei vielen Mustern/Verwendungen von String-Konkatenationen diese selbst durch StringBuilder und Aufrufen von dessen append() Methode ersetzen.

Wenn du einfach _nur_ einen String hast mit `String a = " ";` dann bringt dir StringBuilder natürlich nichts. Wie gesagt, ist StringBuilder dazu da, durch mehrere Konkatenationen einen finalen String zu bauen, ohne, dass bei jeder Konkatenation immer wieder ein neues String-Objekt als Zwischenergebnis entsteht. Sowas trifft man z.B. sehr häufig bei toString() Methoden von Klassen an, da hier oft String-Repräsentationen der Instanzfelder gebaut und das Ganze als finaler String zurückgegeben wird.
 

sserio

Bekanntes Mitglied
java.lang.StringBuilder ist dazu da, um effizient aus mehreren einzelnen hintereinander konkatenierten Strings einen einzelnen String zu bauen, da bei einer "manuellen" String-Konkatenation via z.B. `String c = a+b;` (wobei die Strings `a` und/oder `b` keine Konstanten sind) immer ein neues String-Objekt gebaut wird. Der javac Compiler ist hier allerdings schon sehr intelligent und kann bei vielen Mustern/Verwendungen von String-Konkatenationen diese selbst durch StringBuilder und Aufrufen von dessen append() Methode ersetzen.

Wenn du einfach _nur_ einen String hast mit `String a = " ";` dann bringt dir StringBuilder natürlich nichts. Wie gesagt, ist StringBuilder dazu da, durch mehrere Konkatenationen einen finalen String zu bauen, ohne, dass bei jeder Konkatenation immer wieder ein neues String-Objekt als Zwischenergebnis entsteht. Sowas trifft man z.B. sehr häufig bei toString() Methoden von Klassen an, da hier oft String-Repräsentationen der Instanzfelder gebaut und das Ganze als finaler String zurückgegeben wird.
Alles klar, klingt logisch. Also einfach Ressourcensparend und ein direktes Zusammenfügen, ohne immer wieder neue Strings zu erzeugen. Man hat also nur einen Finalen String. Danke!
 

Robert Zenz

Top Contributor
Ein StringBuilder ist nur dann interessant wenn es um Speicher geht.

Also als Hintergrund, Strings in Java sind unveraenderlich, also egal welche veraendernde Operation auf diesen ausfuehrst, du wirst immer eine neue Instanz bekommen. Zum Beispiel:

Java:
String a = "abcdefgh"; // "abcdefgh"
String b = a.substring(1, 2): // "bc"
String c = a.substring(1, 2): // "bc"

b == c; // false
b.equals(c); // true

Es gibt dann noch interning (String-Cache) und interne Verwaltung, die spielt hier jetzt aber weniger eine Rolle. Mit diesem Wissen das wir immer eine neue Instanz bekommen, sehen wir uns mal konkatenieren an:

Java:
String a = "abc";
String b = "def";
String c = a + b;

In Speicher ausgedrueckt bedeutet das:

Java:
String a = "abc"; // 3 Byte; 3 Byte Gesamt
String b = "def"; // 3 Byte; 6 Byte Gesamt
String c = a + b; // 6 Byte; 12 Byte Gesamt

Da wir nur unveraenderliche Instanzen haben, bedeutet dass das wir zu irgendeinem Zeitpunkt den doppelten Speicherbedarf des Ziel-Strings haben. Mit kurzen Strings ist das egal, aber mit laengeren wird es interessant:

Java:
String a = "riesiger String"; // 250MB
String b = "zweiter riesiger String"; // 250MB
String c = a + b; // Gesamter Speicherbedarf fuer diese Operation: 1000MB

Jede String-Konkatenierung besteht also aus diesen Operationen:

1. Ziel-Speicher fuer "c" allokieren
2. Variable "a" in "c" kopieren
3. Variable "b" in "c" kopieren

Effektiv koennte man es so ausdruecken:

Java:
// Java Code
String c = a + b;

// Under the hood
byte[] bufferC = new byte[a.length() + b.length()];
System.arrayCopy(bufferC, 0, a.buffer, 0, a.length());
System.arrayCopy(bufferC, a.length(), b.buffer, 0, b.length());
String c = new String(bufferC);

Wenn wir das nun in einer Schleife machen, haben wir sehr viele "unnoetige" Speicher-Allokierungen und Kopiervorgaenge. Tatsaechlich sind Allokierungen in Java spot billig (wenn dieser bereits vom Betriebssytem geholt wurde und in der JVM verfuegbar ist), Speicher kopieren ist aber immer noch Speicher kopieren.

Java:
String result = "";

for (int counter = 0; counter < 1_000_000; counter++) {
    result = result + "a";
}

Bei dieser Operation haben wir also eine Million neue Speicher Allokierungen, und zwei Millionen Kopiervorgaenge mit wachsenden Speichergroeszen ("result" muss ja in die neue String-Instanz kopiert werden und es wird jedes Mal groeszer).

Der StringBuilder hingegen hat diese Probleme nicht, da dieser nicht unveraenderlich ist, und sich stattdessen intern einen Buffer haelt:

Java:
StringBuilder result = new StringBuilder();

for (int counter = 0; counter < 1_000_000; counter++) {
    result.append("a");
}

Dies hat nur einen Bruchteil der vorherigen Allokierungen und der Haelfte an Kopiervorgaengen, da sich der StringBuilder intern einen Buffer haelt, welcher nur waechst wenn es notwendig ist. Die eigentliche Implementierung ist relativ simpel und kann in etwa so ausgedrueckt werden:

Java:
// Java Code
result.append("a");

// Under the hood
int remainingSpaceInBuffer = buffer.length - currentSize;
int requiredSpaceInBuffer = parameter.length();

// Pruefen ob genuegend freier Platz im Buffer ist.
if (remainingSpaceInBuffer < requiredSpaceInBuffer) {
    // Wenn nicht, einfach vergroeszern auf das Doppelte.
    byte[] newBuffer = new byte[buffer.length * 2];
    System.arraycopy(newBuffer, 0, buffer, 0, currentSize);
   
    buffer = newBuffer;
}

// Anhaengen der Werte.
System.arraycopy(buffer, currentSize, parameter, 0, parameter.length);
currentSize = currentSize + parameter.length;

Also der interne Speicher von StringBuilder wird immer auf das doppelte vergroeszert, und dann wird nur noch in diesen Speicher hineinkopiert.

Das gesagt, wo es nichts bringt einen StringBuilder einzusetzen ist, wenn die Anzahl und Groesze der Strings komplett vernachlaessigbar ist. Zum Beispiel wenn du Vor- mit Nachnamen zusammen haengen willst. Oder auch im Code selbst, wenn die Strings alle vor dem kompilieren bekannt sind, bringt es nichts einen StringBuilder einzusetzen. Wo es interessant wird, ist wenn du die Groesze des resultierenden Strings nicht kennst, zum Beispiel bei Schleifen, oder wenn es um wirklich grosze Strings geht und du Speicher sparen musst.

Java:
// Kein StringBuilder hilfreich:
String a = "abc" + "def";
String b = a + "edf";
String c = einKleinerString + einAndererKleinerString;

// Wo StringBuilder hilfreich:
for (String value : values) {
    result.append(value);
}

Wie ich am Anfang meinte, es gibt vier Dinge die man hier aber beachten muss. Ebenfalls muss man beachten dass das hier JVM-Interna sind, also Implementierungsdetails der JVM, auf welche man sich nicht verlassen darf.

Erstens, Man kann von Laenge des Strings nicht direkt auf den Speicherverbrauch schlieszen. Zunaechst sind die Strings in der JVM UTF-16, also jedes Zeichen braucht zwei Byte, zum anderen wurde in neueren Versionen der JVM hier eine Optimierung implementiert nach welchem nicht mehr alle Strings UTF-16 verwenden, sondern wenn moeglich nur noch ASCII (glaube ich), auf jeden Fall 1-Byte pro Zeichen.

Zweitens, in der selben Schiene, es gibt einige Operationen welche nicht direkt den Speicher erhoehen, zum Beispiel substring liefert zwar eine neue String Instanz, aber das interne byte/char-Array des Strings wird zwischen beiden Instanzen geteilt. Also die Speicherlast steigt dadurch nur minimal.

Drittens, es gibt den "interning" Mechanismus, einen JVM-internen String-Cache. Zum Beispiel alle Strings welche beim kompilieren bekannt sind, sind automatisch in diesem Cache, also sind die selbe Instanz. Ein Beispiel"

Java:
String a = "abc";
String b = "abc";

a == b; // true
a.equals(b); //true


String a = new String("abc");
String b = new String("abc");

a == b; // false
a.equals(b); //true


String a = "abc";
String b = new String("abc").intern();

a == b; // true
a.equals(b); //true

Mit der String.intern Funktion bekommt man immer eine Instanz des selben Strings aus dem Cache. Damit kann man auch die Speicherlast reduzieren zu einem gewissen Grad in bestimmten Faellen.

Viertens, der Compiler veraendert den Code fuer Optimierungen, zum Beispiel:

Java:
String a = "abc" + "def" + "ghi" + "jkl";

Wird in vielen Faellen vom Compiler umgewandelt in:

Java:
String a = new StringBuilder().append("abc").append("def").append("ghi").append("jkl").toString();

Das kannst du mit einem Decompiler ausprobieren und nachschauen (aber passt auf, auch Decompiler optimieren den Code wieder den sie ausspucken). Auch das alles ist natuerlich ein Implementierungsdetail des Compilers.
 
G

Gelöschtes Mitglied 65838

Gast
Java:
String x = new String("bob");
x +="2";
String y = "bob2";
x == y => false
das mit dem string als objekt kommt auch noch dazu .. ausserdem ist es fancy mit dem string builder zu hanteiren als mit + operator... ist auch besser lesbar
 

sserio

Bekanntes Mitglied
Ein StringBuilder ist nur dann interessant wenn es um Speicher geht.

Also als Hintergrund, Strings in Java sind unveraenderlich, also egal welche veraendernde Operation auf diesen ausfuehrst, du wirst immer eine neue Instanz bekommen. Zum Beispiel:

Java:
String a = "abcdefgh"; // "abcdefgh"
String b = a.substring(1, 2): // "bc"
String c = a.substring(1, 2): // "bc"

b == c; // false
b.equals(c); // true

Es gibt dann noch interning (String-Cache) und interne Verwaltung, die spielt hier jetzt aber weniger eine Rolle. Mit diesem Wissen das wir immer eine neue Instanz bekommen, sehen wir uns mal konkatenieren an:

Java:
String a = "abc";
String b = "def";
String c = a + b;

In Speicher ausgedrueckt bedeutet das:

Java:
String a = "abc"; // 3 Byte; 3 Byte Gesamt
String b = "def"; // 3 Byte; 6 Byte Gesamt
String c = a + b; // 6 Byte; 12 Byte Gesamt

Da wir nur unveraenderliche Instanzen haben, bedeutet dass das wir zu irgendeinem Zeitpunkt den doppelten Speicherbedarf des Ziel-Strings haben. Mit kurzen Strings ist das egal, aber mit laengeren wird es interessant:

Java:
String a = "riesiger String"; // 250MB
String b = "zweiter riesiger String"; // 250MB
String c = a + b; // Gesamter Speicherbedarf fuer diese Operation: 1000MB

Jede String-Konkatenierung besteht also aus diesen Operationen:

1. Ziel-Speicher fuer "c" allokieren
2. Variable "a" in "c" kopieren
3. Variable "b" in "c" kopieren

Effektiv koennte man es so ausdruecken:

Java:
// Java Code
String c = a + b;

// Under the hood
byte[] bufferC = new byte[a.length() + b.length()];
System.arrayCopy(bufferC, 0, a.buffer, 0, a.length());
System.arrayCopy(bufferC, a.length(), b.buffer, 0, b.length());
String c = new String(bufferC);

Wenn wir das nun in einer Schleife machen, haben wir sehr viele "unnoetige" Speicher-Allokierungen und Kopiervorgaenge. Tatsaechlich sind Allokierungen in Java spot billig (wenn dieser bereits vom Betriebssytem geholt wurde und in der JVM verfuegbar ist), Speicher kopieren ist aber immer noch Speicher kopieren.

Java:
String result = "";

for (int counter = 0; counter < 1_000_000; counter++) {
    result = result + "a";
}

Bei dieser Operation haben wir also eine Million neue Speicher Allokierungen, und zwei Millionen Kopiervorgaenge mit wachsenden Speichergroeszen ("result" muss ja in die neue String-Instanz kopiert werden und es wird jedes Mal groeszer).

Der StringBuilder hingegen hat diese Probleme nicht, da dieser nicht unveraenderlich ist, und sich stattdessen intern einen Buffer haelt:

Java:
StringBuilder result = new StringBuilder();

for (int counter = 0; counter < 1_000_000; counter++) {
    result.append("a");
}

Dies hat nur einen Bruchteil der vorherigen Allokierungen und der Haelfte an Kopiervorgaengen, da sich der StringBuilder intern einen Buffer haelt, welcher nur waechst wenn es notwendig ist. Die eigentliche Implementierung ist relativ simpel und kann in etwa so ausgedrueckt werden:

Java:
// Java Code
result.append("a");

// Under the hood
int remainingSpaceInBuffer = buffer.length - currentSize;
int requiredSpaceInBuffer = parameter.length();

// Pruefen ob genuegend freier Platz im Buffer ist.
if (remainingSpaceInBuffer < requiredSpaceInBuffer) {
    // Wenn nicht, einfach vergroeszern auf das Doppelte.
    byte[] newBuffer = new byte[buffer.length * 2];
    System.arraycopy(newBuffer, 0, buffer, 0, currentSize);
  
    buffer = newBuffer;
}

// Anhaengen der Werte.
System.arraycopy(buffer, currentSize, parameter, 0, parameter.length);
currentSize = currentSize + parameter.length;

Also der interne Speicher von StringBuilder wird immer auf das doppelte vergroeszert, und dann wird nur noch in diesen Speicher hineinkopiert.

Das gesagt, wo es nichts bringt einen StringBuilder einzusetzen ist, wenn die Anzahl und Groesze der Strings komplett vernachlaessigbar ist. Zum Beispiel wenn du Vor- mit Nachnamen zusammen haengen willst. Oder auch im Code selbst, wenn die Strings alle vor dem kompilieren bekannt sind, bringt es nichts einen StringBuilder einzusetzen. Wo es interessant wird, ist wenn du die Groesze des resultierenden Strings nicht kennst, zum Beispiel bei Schleifen, oder wenn es um wirklich grosze Strings geht und du Speicher sparen musst.

Java:
// Kein StringBuilder hilfreich:
String a = "abc" + "def";
String b = a + "edf";
String c = einKleinerString + einAndererKleinerString;

// Wo StringBuilder hilfreich:
for (String value : values) {
    result.append(value);
}

Wie ich am Anfang meinte, es gibt vier Dinge die man hier aber beachten muss. Ebenfalls muss man beachten dass das hier JVM-Interna sind, also Implementierungsdetails der JVM, auf welche man sich nicht verlassen darf.

Erstens, Man kann von Laenge des Strings nicht direkt auf den Speicherverbrauch schlieszen. Zunaechst sind die Strings in der JVM UTF-16, also jedes Zeichen braucht zwei Byte, zum anderen wurde in neueren Versionen der JVM hier eine Optimierung implementiert nach welchem nicht mehr alle Strings UTF-16 verwenden, sondern wenn moeglich nur noch ASCII (glaube ich), auf jeden Fall 1-Byte pro Zeichen.

Zweitens, in der selben Schiene, es gibt einige Operationen welche nicht direkt den Speicher erhoehen, zum Beispiel substring liefert zwar eine neue String Instanz, aber das interne byte/char-Array des Strings wird zwischen beiden Instanzen geteilt. Also die Speicherlast steigt dadurch nur minimal.

Drittens, es gibt den "interning" Mechanismus, einen JVM-internen String-Cache. Zum Beispiel alle Strings welche beim kompilieren bekannt sind, sind automatisch in diesem Cache, also sind die selbe Instanz. Ein Beispiel"

Java:
String a = "abc";
String b = "abc";

a == b; // true
a.equals(b); //true


String a = new String("abc");
String b = new String("abc");

a == b; // false
a.equals(b); //true


String a = "abc";
String b = new String("abc").intern();

a == b; // true
a.equals(b); //true

Mit der String.intern Funktion bekommt man immer eine Instanz des selben Strings aus dem Cache. Damit kann man auch die Speicherlast reduzieren zu einem gewissen Grad in bestimmten Faellen.

Viertens, der Compiler veraendert den Code fuer Optimierungen, zum Beispiel:

Java:
String a = "abc" + "def" + "ghi" + "jkl";

Wird in vielen Faellen vom Compiler umgewandelt in:

Java:
String a = new StringBuilder().append("abc").append("def").append("ghi").append("jkl").toString();

Das kannst du mit einem Decompiler ausprobieren und nachschauen (aber passt auf, auch Decompiler optimieren den Code wieder den sie ausspucken). Auch das alles ist natuerlich ein Implementierungsdetail des Compilers.
Das ist ziemlich viel auf einemal, da ich gerade erst in der 3 Woche bei Java bin und ich mich noch garnicht so mit der Materie auseinenader gesetzt habe. Dennoch klingt vieles ziemlich logisch. Das mit der Speicherlast und wie man etwas reduzieren kann, damit kenne ich mich noch garnicht aus. Trotzdem vielen Dank
 
G

Gelöschtes Mitglied 65838

Gast
soweit ich weis werden strings in java in eine HashMap gespeichert intern

diese hashmap werte sind aber unveränderlich
wenn du zwei gleiche strings baust mit x = "..." deuten sie auf den gleichen hashmap eintrag und ergeben true beim vergleich aber sobald du x = new String... hast hast du objekte und die sind wieder ganz anders... usw
 

mihe7

Top Contributor
soweit ich weis werden strings in java in eine HashMap gespeichert intern
Nur ein Teil der Strings, insbesondere Literale, werden "interned", landen also im String Pool. Wird ein String mit Hilfe des String-Konstruktors erzeugt, kommt der String nicht aus dem Pool. Man kann aber einen String per String#intern() in den Pool legen, wenn man möchte.

Es gilt damit folgendes für Referenzvergleiche:
Java:
"X" == "X"
"X" != new String("X") 
new String("X") != new String("X")
"X" == new String("X").intern()
 

Neumi5694

Top Contributor
Ich bin überzeugter Anhänger von StringBuildern, vor allem in Verbindung mit Formattern. Damit werden vor allem meine Logtexte zusammengbaut ( es gibt jeweils immer eine größere Menge von zu formatierenden Werten und Informationen).

Klar haben wir mittlerweile genügend Rechenleistung, um bei jeder Operation einen neuen String erstellen zu lassen, aber ich find's unterm Strich angenehmer, wirkt ohne viel Aufwand auch gleich besser gekapselt vom Rest.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Strings und StringBuilder Java Basics - Anfänger-Themen 12
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
J StringBuilder initialisieren und Löschbefehl Java Basics - Anfänger-Themen 20
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
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
W Gleichzeitiges ersetzen mehrerer Strings Java Basics - Anfänger-Themen 7
R Datentypen Das Verhalten von Strings als Datentypen Java Basics - Anfänger-Themen 7
N Nachkommastellen von Strings Java Basics - Anfänger-Themen 3
T Strings unveränderlich???? Java Basics - Anfänger-Themen 22
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
S Die durchschnittliche Länge der Strings Java Basics - Anfänger-Themen 11
M Operatoren Strings mit Vergleichsoperatoren, funktioniert das? Java Basics - Anfänger-Themen 9
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
J Größe eines Strings in Pixel Java Basics - Anfänger-Themen 18
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
N Strings verpflechten Java Basics - Anfänger-Themen 4
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
L Strings aneinanderhängen Java Basics - Anfänger-Themen 2
M Strings vergleichen Java Basics - Anfänger-Themen 10
Nerdinfekt BMI Rechner, fehler beim Zurückgeben des Strings? Java Basics - Anfänger-Themen 2
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
S 2 Strings mit Equals vergleichen Java Basics - Anfänger-Themen 11
Q Besitzen zwei Strings identische Buchstaben, nur in anderer Reihenfolge? Java Basics - Anfänger-Themen 10
marcooooo Separator zwischen allen Zeichen eines Strings einfügen Java Basics - Anfänger-Themen 29
C Ternärer Operator mit Strings Java Basics - Anfänger-Themen 3
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
P Verketten, Aneinanderreihen von Strings Java Basics - Anfänger-Themen 2
M Strings mit gerader und ungerader Länge ausgeben Java Basics - Anfänger-Themen 10
J Alle Werte eines Strings zusammen addieren Java Basics - Anfänger-Themen 15
W Strings und das parsen Java Basics - Anfänger-Themen 8
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
D Vergleichen von Strings Java Basics - Anfänger-Themen 6
M Konkatenation von zwei Strings Java Basics - Anfänger-Themen 6
J Abbruchbedingung in Schleife/ Untersuchung von Strings Java Basics - Anfänger-Themen 2
S Buchstaben in Großbuchstaben (Strings) Java Basics - Anfänger-Themen 5
X Anagramm mit Strings und Methode Java Basics - Anfänger-Themen 53
P geschachtelte Schleife mit Strings Java Basics - Anfänger-Themen 2
P Strings mit der Axt zerteilen Java Basics - Anfänger-Themen 7
F Alle Zeichenkombinationen eines Strings iterativ herausfinden Java Basics - Anfänger-Themen 26
K Strings hochzählen Java Basics - Anfänger-Themen 20
J Strings untereinander in einer Liste vergleichen Java Basics - Anfänger-Themen 18
B Frage zu: String... strings -> Ungleiche Anzahl an Parameter? Java Basics - Anfänger-Themen 4
F Vergleiche mit charAt funktioniert bei Strings nicht, was tun? Java Basics - Anfänger-Themen 5
T Probleme mit Strings Java Basics - Anfänger-Themen 6
J Unveränderbarkeit von Strings Java Basics - Anfänger-Themen 3
O Klammerung bei Strings Java Basics - Anfänger-Themen 10
A Liste aus drei Strings erstellen Java Basics - Anfänger-Themen 5
N Zwei Strings mit "==" vergleichen warum TRUE Java Basics - Anfänger-Themen 2
G Teil(e) eines Strings entfernen wenn spezifische Zeichen (< & >) vorkommen Java Basics - Anfänger-Themen 5
D ergebnis.matches("[1-9]?[0-9].[0-9][0-9]?") ein teil eines größeren Strings Java Basics - Anfänger-Themen 12
J Breite eines Strings bestimmen Java Basics - Anfänger-Themen 4
D Zwei Strings sind gleich bei if aber nicht true Java Basics - Anfänger-Themen 2
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
J Strings sind gleich werden aber ungleich ausgewertet Java Basics - Anfänger-Themen 2
N Vergleich von Strings schlägt fehl.. Java Basics - Anfänger-Themen 5
B 4 Strings, Anfangsbuchstaben muss unterschiedlich sein Java Basics - Anfänger-Themen 12
P Strings in String Array schreiben Java Basics - Anfänger-Themen 13
J Input/Output Strings aneinander reihen mit while schleife Java Basics - Anfänger-Themen 25
B mir nur die Gesamtzahl von einzigartigen Strings aus Array ausgeben lassen Java Basics - Anfänger-Themen 5
R Erste Schritte Sicheres einlesen eines Strings Java Basics - Anfänger-Themen 2
F Maximale Länge eines Strings Java Basics - Anfänger-Themen 5
J Best Practice Datum Differenz aus zwei Strings ermitteln Java Basics - Anfänger-Themen 8
Jinnai4 Strings ersetzen Java Basics - Anfänger-Themen 9
R Übergeben eines Array Strings an einen Spinner Java Basics - Anfänger-Themen 4
L Rekursiv zwei Strings vergleichen Java Basics - Anfänger-Themen 3
L Prüfe, ob die im String Array enthaltenen Strings aufsteigend sind. Java Basics - Anfänger-Themen 19

Ähnliche Java Themen

Neue Themen


Oben