Wie verkette ich zwei Strings in Java?

Lesezeit: 5 Minuten

Wie verkette ich zwei Strings in Java
Prüfung

Ich versuche, Zeichenfolgen in Java zu verketten. Warum funktioniert das nicht?

public class StackOverflowTest {  
    public static void main(String args[]) {
        int theNumber = 42;
        System.out.println("Your number is " . theNumber . "!");
    }
}

1646359028 611 Wie verkette ich zwei Strings in Java
Peter Lang

Sie können Strings mit der verketten + Operator:

System.out.println("Your number is " + theNumber + "!");

theNumber wird implizit in den String konvertiert "42".

  • Oder Sie könnten verwenden String.format Weitere Details zu string.formater finden Sie in der Formatierer Dokumentation.

    – Ota

    19. Juli 2014 um 12:12 Uhr

Wie verkette ich zwei Strings in Java
Bozo

Der Verkettungsoperator in Java ist +nicht .

Lesen Sie dies (einschließlich aller Unterabschnitte), bevor Sie beginnen. Versuchen Sie aufzuhören, auf PHP-Weise zu denken 😉

Um Ihren Blick auf die Verwendung von Strings in Java zu erweitern – die + -Operator für Zeichenfolgen wird tatsächlich (vom Compiler) in etwas Ähnliches umgewandelt wie:

new StringBuilder().append("firstString").append("secondString").toString()

  • @Erick Robertson, du liegst falsch. Lesen Sie noch einmal das Javadoc von java.lang.String. Verwenden + ist innerhalb einer Schleife ineffizient. Andernfalls verwendet der Compiler StringBuilder

    – Bozo

    20. September 2010 um 17:48 Uhr


  • @Erick: du verwirrst + mit +=.

    – BalusC

    20. September 2010 um 17:48 Uhr

  • Wow, das ist mir neu. Das war nicht immer so. Ich werde explizit aufhören zu verwenden StringBuilder jetzt, wenn ich das gleiche mit einer Folge von tun kann +‘S. Ich werde es jedoch weiterhin verwenden, wenn Zeichenfolgen über mehrere Zeilen hinweg verkettet werden, z. B. wenn Zeichenfolgen bedingt angehängt werden und dergleichen. Danke!

    – Eric Robertson

    20. September 2010 um 18:21 Uhr

1646359028 282 Wie verkette ich zwei Strings in Java
DwB

Auf diese Frage gibt es zwei grundsätzliche Antworten:

  1. [simple] Verwenden Sie die + Operator (String-Verkettung). "your number is" + theNumber + "!" (wie an anderer Stelle angemerkt)
  2. [less simple]: Verwenden StringBuilder (oder StringBuffer).
StringBuilder value;
value.append("your number is");
value.append(theNumber);
value.append("!");

value.toString();

Ich rate davon ab, Operationen wie diese zu stapeln:

new StringBuilder().append("I").append("like to write").append("confusing code");

Bearbeiten: Ab Java 5 wird der String-Verkettungsoperator übersetzt StringBuilder Aufrufe durch den Compiler. Aus diesem Grund sind beide oben genannten Methoden gleich.

Merke: Raum ist ein kostbares Gut, wie dieser Satz zeigt.

Vorbehalt: Beispiel 1 unten generiert mehrere StringBuilder Instanzen und ist weniger effizient als Beispiel 2 unten

Beispiel 1

String Blam = one + two;
Blam += three + four;
Blam += five + six;

Beispiel 2

String Blam = one + two + three + four + five + six;

  • JavaC konvertiert “+”, um StringBuilders zu verwenden, siehe stackoverflow.com/questions/1532461/…

    – Schlitten

    20. September 2010 um 18:20 Uhr


  • Ich denke, es ist im Allgemeinen nicht ratsam zu erraten, wie der Compiler den Code übersetzt, da Compiler-Autoren (und Optimierer) möglicherweise zur Prozedur wechseln, um maximale Leistung zu erzielen, solange sie mit der Semantik der Sprache konsistent ist.

    – GregD

    30. August 2013 um 2:25 Uhr

  • Es ist schlecht beraten erraten wie der Compiler Code übersetzt. Aber es ist bekannt, dass die Java-Compiler ab Java 5 String-Concats in StringBuilder-Aufrufe umwandeln, wodurch meine Behauptung das Gegenteil einer Vermutung ist.

    – DwB

    22. Januar 2014 um 15:19 Uhr

1646359029 537 Wie verkette ich zwei Strings in Java
Nikolaus Filotto

Out of the Box haben Sie 3 Wege den Wert einer Variablen in a einfügen String wie Sie versuchen, Folgendes zu erreichen:

1. Der einfachste Weg

Sie können einfach den Operator verwenden + zwischen a String und jedes Objekt oder jeden primitiven Typ, wird es automatisch verkettet String und

  1. Im Falle eines Objekts der Wert von String.valueOf(obj) Entsprechend der Stringnull” wenn obj ist null andernfalls der Wert von obj.toString().
  2. Im Falle eines primitiven Typs das Äquivalent von String.valueOf(<primitive-type>).

Beispiel mit einem non null Objekt:

Integer theNumber = 42;
System.out.println("Your number is " + theNumber + "!");

Ausgabe:

Your number is 42!

Beispiel mit a null Objekt:

Integer theNumber = null;
System.out.println("Your number is " + theNumber + "!");

Ausgabe:

Your number is null!

Beispiel mit einem primitiven Typ:

int theNumber = 42;
System.out.println("Your number is " + theNumber + "!");

Ausgabe:

Your number is 42!

2. Der explizite Weg und möglicherweise der effizienteste

Sie können verwenden StringBuilder (oder StringBuffer das Thread-sichere veraltete Gegenstück), um Ihre zu erstellen String Verwendung der append Methoden.

Beispiel:

int theNumber = 42;
StringBuilder buffer = new StringBuilder()
    .append("Your number is ").append(theNumber).append('!');
System.out.println(buffer.toString()); // or simply System.out.println(buffer)

Ausgabe:

Your number is 42!

Hinter den Kulissen konvertieren aktuelle Java-Compiler auf diese Weise alle String Verkettungen mit dem Operator +der einzige Unterschied zum vorherigen Weg besteht darin, dass Sie die haben volle Kontrolle.

In der Tat werden die Compiler die verwenden Standardkonstruktor also die Standardkapazität (16), da sie keine Ahnung haben, was die endgültige Länge der wäre String zu bauen, was bedeutet, dass wenn die endgültige Länge größer ist als 16die Kapazität wird notwendigerweise erweitert, was einen Preis in Bezug auf die Leistungen hat.

Also, wenn Sie im Voraus wissen, dass die Größe Ihres endgültigen String wird größer sein als 16, ist es viel effizienter, diesen Ansatz zu verwenden, um eine bessere Anfangskapazität bereitzustellen. In unserem Beispiel erstellen wir beispielsweise a String dessen Länge größer als 16 ist, sollte es für eine bessere Leistung wie folgt umgeschrieben werden:

Beispiel optimiert:

int theNumber = 42;
StringBuilder buffer = new StringBuilder(18)
    .append("Your number is ").append(theNumber).append('!');
System.out.println(buffer)

Ausgabe:

Your number is 42!

3. Der am besten lesbare Weg

Sie können die Methoden verwenden String.format(locale, format, args) oder String.format(format, args) dass beide auf a angewiesen sind Formatter um deine zu bauen String. Auf diese Weise können Sie das Format Ihres Finales festlegen String durch die Verwendung von Platzhaltern, die durch den Wert der Argumente ersetzt werden.

Beispiel:

int theNumber = 42;
System.out.println(String.format("Your number is %d!", theNumber));
// Or if we need to print only we can use printf
System.out.printf("Your number is still %d with printf!%n", theNumber);

Ausgabe:

Your number is 42!
Your number is still 42 with printf!

Der interessanteste Aspekt bei diesem Ansatz ist die Tatsache, dass wir eine klare Vorstellung davon haben, was das Finale sein wird String weil es viel einfacher zu lesen ist, also ist es viel einfacher zu warten.

1646359029 386 Wie verkette ich zwei Strings in Java
Andreas

Der Java-8-Weg:

StringJoiner sj1 = new StringJoiner(", ");
String joined = sj1.add("one").add("two").toString();
// one, two
System.out.println(joined);


StringJoiner sj2 = new StringJoiner(", ","{", "}");
String joined2 = sj2.add("Jake").add("John").add("Carl").toString();
// {Jake, John, Carl}
System.out.println(joined2);

1646359029 537 Wie verkette ich zwei Strings in Java
Nikolaus Filotto

Sie müssen ein PHP-Programmierer sein.

Benutze einen + Schild.

System.out.println("Your number is " + theNumber + "!");

Wie verkette ich zwei Strings in Java
Mateusz Dymczyk

“+” statt “.”

929740cookie-checkWie verkette ich zwei Strings in Java?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy