String-API-Updates in Java 12

1. Einleitung

Java 12 hat der String- Klasse einige nützliche APIs hinzugefügt . In diesem Tutorial werden wir diese neuen APIs anhand von Beispielen untersuchen.

2. Einzug ()

Die Methode indent () passt den Einzug jeder Zeile der Zeichenfolge basierend auf dem an sie übergebenen Argument an.

Wenn indent () für eine Zeichenfolge aufgerufen wird, werden die folgenden Aktionen ausgeführt:

  1. Die Zeichenfolge wird konzeptionell mit lines () in Zeilen unterteilt . lines () ist die in Java 11 eingeführte String-API.
  2. Jede Zeile wird dann basierend auf dem an sie übergebenen int- Argument n angepasst und dann mit einem Zeilenvorschub "\ n" versehen.
    1. Wenn n > 0 ist, werden am Anfang jeder Zeile n Leerzeichen eingefügt.
    2. Wenn n <0 ist, werden bis zu n Leerzeichen am Anfang jeder Zeile entfernt. Wenn eine bestimmte Zeile nicht genügend Leerzeichen enthält, werden alle führenden Leerzeichen entfernt.
    3. Wenn n == 0 ist, bleibt die Zeile unverändert. Leitungsterminatoren sind jedoch weiterhin normalisiert.
  3. Die resultierenden Zeilen werden dann verkettet und zurückgegeben.

Zum Beispiel:

@Test public void whenPositiveArgument_thenReturnIndentedString() { String multilineStr = "This is\na multiline\nstring."; String outputStr = " This is\n a multiline\n string.\n"; String postIndent = multilineStr.indent(3); assertThat(postIndent, equalTo(outputStr)); }

Wir können auch ein negatives int übergeben , um den Einzug der Zeichenfolge zu verringern. Zum Beispiel:

@Test public void whenNegativeArgument_thenReturnReducedIndentedString() { String multilineStr = " This is\n a multiline\n string."; String outputStr = " This is\n a multiline\n string.\n"; String postIndent = multilineStr.indent(-2); assertThat(postIndent, equalTo(outputStr)); }

3. transform ()

Wir können eine Funktion mit der transform () -Methode auf diesen String anwenden . Die Funktion sollte ein einzelnes String- Argument erwarten und ein Ergebnis erzeugen:

@Test public void whenTransformUsingLamda_thenReturnTransformedString() { String result = "hello".transform(input -> input + " world!"); assertThat(result, equalTo("hello world!")); }

Es ist nicht erforderlich, dass die Ausgabe eine Zeichenfolge sein muss. Zum Beispiel:

@Test public void whenTransformUsingParseInt_thenReturnInt() { int result = "42".transform(Integer::parseInt); assertThat(result, equalTo(42)); }

4. Fazit

In diesem Artikel haben wir die neuen String- APIs in Java 12 untersucht. Wie üblich finden Sie Code-Snippets auf GitHub.