Parsing im allgemeinsten Sinne ist das Extrahieren von benötigten Informationen aus Daten, meistens Textdaten. Was ist parse in Java? Es gibt viele Java-Klassen, die über die Methode parse() verfügen. Normalerweise erhält die parse()-Methode eine Zeichenkette als Eingabe, „extrahiert“ daraus die benötigten Informationen und wandelt sie in ein Objekt der aufrufenden Klasse um. Sie nimmt zum Beispiel eine Zeichenkette entgegen und gibt das Datum zurück, das in dieser Zeichenkette „verborgen“ ist.
In diesem Beitrag werfen wir einen Blick auf die 10 nützlichen Varianten von parse().
0. parseInt()
Beginnen wir mit einer der beliebtesten parse()-Methoden, die nicht exakt parse(), sondern parseInt() heißt. Die Java-Methode parseInt() wird verwendet, um den primitiven Datentyp aus einer bestimmten Zeichenkette zu ermitteln. Mit anderen Worten: Sie wandelt eine Zeichenkette in eine Zahl um. parseInt() kann ein oder zwei Argumente haben. So sieht die Syntax von parseInt() aus:
static int parseInt(String s)
static int parseInt(String s, int radix)
Dabei ist s die Zeichenkette, die einen Dezimalwert mit Vorzeichen repräsentiert, und radix die Basis eines Zahlensystems. Beachte, dass es keinen standardmäßigen Basiswert gibt – du musst einen Wert zwischen 2 und 36 eingeben.
Hier ist ein Beispiel. So führt man ein Parsing mit ParseInt() aus:
public class ParseInt0 {
public static void main(String args[]){
int x = Integer.parseInt("12");
double c = Double.parseDouble("12");
int b = Integer.parseInt("100",2);
System.out.println(Integer.parseInt("12"));
System.out.println(Double.parseDouble("12"));
System.out.println(Integer.parseInt("100",2));
System.out.println(Integer.parseInt("101", 8));
}
}
Die Ausgabe ist:
12
12.0
4
65
1. parse()-Methode von Period
Period ist eine Java-Klasse, mit der du eine Zeitspanne in Form von Jahren, Monaten und Tagen modellieren kannst, z. B. „3 Jahre, 5 Monate und 2 Tage“. Sie hat eine parse()-Methode, um einen Zeitraum aus einem Text zu gewinnen. Hier ist die Syntax von period parse():
public static Period parse(CharSequence text)
CharSequence ist ein Interface, das von Strings implementiert wird. Du kannst also Strings als Textelement in der parse()-Methode verwenden. Natürlich sollte der String das richtige Format haben, um ein Objekt der Klasse Period zurückzugeben.
Dieses Format ist PnYnMnD.
Dabei steht Y für „Jahr“, M für „Monat“, D für „Tag“. N ist eine Zahl, die dem jeweiligen Wert des Zeitraums entspricht.- Die Methode hat einen Parameter – einen Textwert.
- parse() gibt einen Zeitraumwert zurück, bei dem der Wert eines Strings zu einem Parameter wird.
- Als Ausnahme kann period parse() die DateTimeParseException zurückgeben, wenn der String-Wert nicht der Struktur eines Zeitraums entspricht.
import java.time.Period;
public class ParseDemo1 {
public static void main(String[] args)
{
//Here is the age String in format to parse
String age = "P17Y9M5D";
// Converting strings into period value
// using parse() method
Period p = Period.parse(age);
System.out.println("the age is: ");
System.out.println(p.getYears() + " Years\n"
+ p.getMonths() + " Months\n"
+ p.getDays() + " Days\n");
}
}
}
}
Die Ausgabe ist:
das Alter ist:
17 Jahre
9 Monate
5 Tage
2. parse()-Methode von SimpleDateFormat
SimpleDateFormat ist eine Klasse, die für die Formatierung und das Parsing von Datumsangaben in einer ortsabhängigen Weise verwendet wird. Die Methode SimpleDateFormat parse() zerlegt einen String in Datumsbestandteile und gibt einen Datumswwert im entsprechenden Format zurück. Die Methode beginnt mit dem Parsen der Zeichenkette an einem Index, der vom Entwickler festgelegt wird. Das ist die Syntax von SimpleDateFormat parse():
public Date parse(String the_text, ParsePosition position)
Die Methode hat zwei Parameter: - Position: die Daten am Startindex, der immer der Objekttyp ParsePosition ist.
- the_text: definiert die Zeichenkette, die von der Methode geparst wird, und ist ein Wert vom Typ String.
// Parsing strings into the Date format with two different patterns import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ParseDemo2 {
public static void main(String[] args) throws ParseException {
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("MM/dd/yyyy");
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("dd/MM/yyyy");
//simpleDateFormat1.setLenient(false);
Date date1 = simpleDateFormat1.parse("010/14/2020");
System.out.println(date1);
Date date2 = simpleDateFormat2.parse("14/10/2020");
System.out.println(date2);
ParsePosition p1 = new ParsePosition(18);
ParsePosition p2 = new ParsePosition(19);
ParsePosition p3 = new ParsePosition(5);
String myString = "here is the date: 14/010/2020";
Date date3 = simpleDateFormat2.parse(myString,p1);
Date date4 = simpleDateFormat2.parse(myString,p2);
Date date5 = simpleDateFormat2.parse(myString,p3);
System.out.println(date3);
System.out.println(date4);
System.out.println(date5);
}
}
Die Ausgabe ist:
Wed Oct 14 00:00:00 EEST 2020
Wed Oct 14 00:00:00 EEST 2020
Wed Oct 14 00:00:00 EEST 2020
Sun Oct 04 00:00:00 EEST 2020
null
Die letzte Zeile ist null, weil es kein Datumsmuster ab der 5. Position gibt. Übrigens, wenn du versuchst, date5 ohne Position zu parsen, z. B. Date date5 = simpleDateFormat2.parse(myString), erhältst du eine Ausnahme:
Exception in thread "main" java.text.ParseException: Unparseable date: "here is the date: 14/010/2020"
at java.base/java.text.DateFormat.parse(DateFormat.java:396)
at ParseDemo2.main(ParseDemo2.java:22)
3. parse()-Methode von LocalDate
LocalDate ist eine Klasse, die in Java 8 eingeführt wurde, um ein Datum wie Jahr-Monat-Tag zu repräsentieren (auf Tag-des-Jahres, Tag-der-Woche und Woche-des-Jahres kann auch zugegriffen werden). LocalDate repräsentiert keine Zeit oder Zeitzone. Die Methode LocalDate parse() hat zwei Varianten. Beide helfen dabei, einen String in eine neue Java 8 Datums-API zu konvertieren – java.time.LocalDate.parse(CharSequence text, DateTimeFormatter, formatter)
Diese Methode parst eine Zeichenkette mit einem bestimmten Formatter, um eine Instanz von LocalDate zu erhalten. Die Syntax der Methode lautet:
public static LocalTime parse(CharSequence text,
DateTimeFormatter formatter)
Es gibt zwei Parameter für die Methode: den Text, der geparst werden soll, und den Formatter, den ein Entwickler anwendet. Als Rückgabewert gibt die Methode ein LocalTime-Objekt zurück, das als lokale Tageszeit erkannt wird.
Wenn der Textwert nicht geparst werden konnte, löst das System die DayTimeParseException aus.
Hier ist ein Codebeispiel für die Verwendung von LocalDate parse() mit zwei Parametern:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class ParserDemo3 {
public static void main(String[]args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String date = "14/10/2020";
LocalDate localDate = LocalDate.parse(date, formatter);
System.out.println("parsed local date: " + localDate);
System.out.println("formatted local date: " + formatter.format(localDate));
}
}
Die Ausgabe ist:
geparstes lokales Datum: 2020-10-14
formatiertes lokales Datum: 14/10/2020
Die Methode LocalDate parse() mit einem Parameter hat die folgende Syntax:
public static LocalTime parse(CharSequence text)
Bei dieser Methode muss kein Formatter angegeben werden. Nachdem ein Entwickler die String-Werte in die Klammern eingegeben hat, verwendet das System automatisch DateTimeFormatter.ISO_LOCAL_DATE.
Diese Methode hat einen einzigen Parameter: CharSequence text. Du kannst hier den String-Wert verwenden. Achte darauf, dass er nicht null ist und die Struktur des Formatters einhält. Wenn es keine Möglichkeit gibt, eine Zeichenkette zu parsen, erhält der Entwickler die DateTimeExceptionAlert.
Hier ist ein Beispiel für die Anwendung von LocalDate parse():
import java.time.*;
public class ParseDemo3 {
public static void main(String[] args)
{
// let’s make a new LocalDate object
LocalDate localDate = LocalDate.parse("2020-10-14");
System.out.println("LocalDate : " + localDate);
}
}
Die Ausgabe ist:
LocalDate : 2020-10-14
4. parse()-Methode von LocalDateTime
LocalDateTime ein Datum-Uhrzeit-Objekt, das Datum und Uhrzeit häufig als Jahr-Monat-Tag-Stunde-Minute-Sekunde darstellt. Entwickler können auch andere Datums- und Uhrzeitfelder verwenden (Tag des Jahres, Tag der Woche und Woche des Jahres). Diese Klasse ist unveränderlich. Die Uhrzeit wird auf eine Nanosekunde genau dargestellt. Du kannst zum Beispiel den Wert „17. November 2020 um 13:30.30.123456789“ in LocalDateTime speichern. In dieser Klasse geht es nicht um die Darstellung einer Zeitzone. Es handelt sich vielmehr um eine Standard-Datumsdarstellung plus lokaler Uhrzeit. Die Methode LocalDateTime parse() gibt es in zwei Varianten:static LocalDateTime parse(CharSequence text) gibt eine Instanz von LocalDateTime aus einer Textzeichenfolge wie 2007-12-03T10:15:30 zurück.
static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter) gibt eine Instanz von LocalDateTime aus einem Textstring unter Verwendung eines bestimmten Formatters zurück.
import java.time.*;
public class ParseDemo11 {
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.parse("2020-11-17T19:34:50.63");
System.out.println("LocalDateTime is: " + localDateTime);
}
}
Die Ausgabe ist:
LocalDateTime ist: 2020-11-17T19:34:50.630
5. parse()-Methode von ZonedDateTime
Die Klasse ZonedDateTime stellt Datum und Uhrzeit mit einer Zeitzone dar. Diese Klasse ist unveränderlich. Sie speichert Datums- und Zeitfelder mit einer Genauigkeit von Nanosekunden und eine Zeitzone, wobei ein Zonen-Offset verwendet wird, um mehrdeutige lokale Daten und Uhrzeiten zu behandeln. Wenn du also einen Wert wie „14. Oktober 2020 um 17:50.30.123456789 +02:00 in der Zeitzone Europa/Paris“ verwenden willst, kannst du ZonedDateTime verwenden. Die Klasse wird oft verwendet, um auf der lokalen Uhrzeit basierende Daten zu manipulieren. ZondeDateTime parse() ist ein Parser, der die Zeichenkette in Token im ISO-8061-System zerlegt. Hier ist ein Beispiel für einen Wert, den du nach dem Parsen erhältst:2020-04-05T13:30:25+01:00 Europe/Rome
Sie wird immer dann eingesetzt, wenn hochpräzise Daten benötigt werden (schließlich sind die Daten, die du erhältst, bis auf Nanosekunden genau). Die Klasse wird oft verwendet, um auf der lokalen Uhrzeit basierende Daten zu manipulieren.
Werfen wir einen Blick auf die allgemeine Syntax der Methode ZonedDateTime parse(), mit der Entwickler String-Werte in die ZonedDateTime-Klasse umwandeln.
public static ZonedDateTime parse(CharSequence text)
Der einzige Parameter, den die Methode verwendet, ist ein String text. Als Rückgabewert erhältst du ein oder eine Reihe von Objekten im ZonedDateTime-Format. Wenn beim Parsen ein Fehler auftritt oder es zunächst nicht möglich ist, gibt die Methode eine DateTimeParseException zurück.
Außerdem gibt es eine parse()-Methode mit zwei Variablen.
public static ZonedDateTime parse(CharSequence text, DateFormatter formatter)
Diese Methode erhält eine Instanz von ZonedDateTime aus einem text-Wert unter Verwendung eines bestimmten Formatters. Die Methode mit einem Parameter, dem Formatter DateTimeFormatter.ISO_LOCAL_TIME, wird standardmäßig verwendet.
Werfen wir einen Blick auf den Anwendungsfall für ZonedDateTime parse():
// An example program that uses
// ZonedDateTime.parse() method
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class ParseDemo4 {
public static void main(String[] args) {
ZonedDateTime zonedDateTime = ZonedDateTime.parse("2020-10-15T10:15:30+01:00");
System.out.println(zonedDateTime);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ISO_ZONED_DATE_TIME;
String date = "2020-10-15T13:30:25+01:00";
ZonedDateTime zoneDateTime1 = ZonedDateTime.parse(date, dateTimeFormatter);
System.out.println(zoneDateTime1);
}
}
Die Ausgabe ist:
2020-10-15T10:15:30+01:00
2020-10-15T13:30:25+01:00
6. parse()-Methode von LocalTime
Die Klasse LocalTime stellt eine Uhrzeit dar, die oft als Stunde-Minute-Sekunde angegeben wird. Diese Klasse ist ebenso unveränderlich wie ZonedDateTime. Die Uhrzeit wird auf Nanosekunden genau dargestellt. Zum Beispiel kann der Wert „13:45.30.123456789“ in LocalTime gespeichert werden. Es gibt zwei LocalTime parse()-Methoden, mit einem und zwei Parametern. Schauen wir uns beide an:
public static LocalTime parse(CharSequence text)
Du kannst LocalTime parse() mit nur einem Parameter verwenden, nämlich der Zeichenkette, die du parsen willst. In diesem Fall wird standardmäßig der Formatter DateTimeFormatter.ISO_LOCAL_TIME verwendet.
Method with two parameters has the next syntax:
public static LocalTime parse(CharSequence text,
DateTimeFormatter formatter)
Sie holt eine Instanz von LocalTime aus einem text-Wert mit einem bestimmten Formatter.
Die beiden Methoden geben den LocalTime-Wert im Format hh/mm/ss zurück. Achte auf DateTimeParceException-Meldungen. Sie bedeuten, dass das Format des Strings text nicht mit dem von LocalTime-Objekten übereinstimmt.
Hier ist ein praktisches Beispiel für die Verwendung von LocalTime parse():
import java.time.*;
import java.time.format.*;
public class ParseDemo5 {
public static void main(String[] args)
{
LocalTime localTime
= LocalTime.parse("10:25:30");
// return the output value
System.out.println("LocalTime : "
+ localTime);
// create a formater
DateTimeFormatter formatter
= DateTimeFormatter.ISO_LOCAL_TIME;
LocalTime localTime1
= LocalTime.parse("12:30:50");
// parse a string to get a LocalTime object in return
LocalTime.parse("12:30:50",
formatter);
// print the output
System.out.println("LocalTime : "
+ localTime1);
}
}
7. parse()-Methode von MessageFormat
MessageFormat erweitert die Klasse Format. Format ist eine abstrakte Basisklasse für die Formatierung von ortsabhängigen Daten (Datum, Nachrichten und Zahlen). MessageFormat übernimmt Objekte und formatiert sie. Dann fügt es die formatierten Strings an den entsprechenden Stellen in das Muster ein. MessageFormat parse() wird verwendet, um einen String-Wert zu erhalten, wenn der Startindex übergeben wird. Hier ist die allgemeine Syntax der Methode:
public Object[] parse(String source, ParsePosition position)
Dabei ist source der zu parsende String und position der Startindex des Parsens.
Hier ist ein Beispiel, wie die Methode MessageFormat parse() funktioniert:
import java.text.MessageFormat;
import java.text.ParsePosition;
public class ParseDemo7 {
public static void main(String[] args) {
try {
MessageFormat messageFormat = new MessageFormat("{1, number, #}, {0, number, #.#}, {2, number, #.##}");
ParsePosition pos = new ParsePosition(3);
Object[] hash = messageFormat.parse("12.101, 21.382, 35.121", pos);
System.out.println("value after parsing: ");
for (int i = 0; i < hash.length; i++)
System.out.println(hash[i]);
}
catch (NullPointerException e) {
System.out.println("\nNull");
System.out.println("Exception thrown : " + e);
} }
}
8. parse()-Methode von Level
Wenn ein Programmierer einen Logger verwendet, um eine Meldung zu protokollieren, wird sie mit einem bestimmten Log-Level protokolliert. Es gibt sieben integrierte Log-Levels:- SEVERE
- WARNING
- INFO
- CONFIG
- FINE
- FINER
- FINEST
public static Level parse(String name)
Der Parameter der Methode ist der Name eines Strings, den der Entwickler parsen möchte. Das kann der Name des Levels, sein Initialisierungsname oder eine andere Ganzzahl sein. Im Gegenzug erhält der Programmierer einen Wert für den Level-Namen, der dem der ursprünglichen Zeichenkette entspricht.
Wenn das Argument Zeichen enthält, die nicht geparst werden können, löst das System die IllegalArgumentException aus. Wenn ein String keine Werte enthält, erhält der Entwickler eine NullPointerException.
Hier ist ein Stück Code, das die Implementierung von Level parse() zeigt.
import java.util.logging.Level;
public class ParseDemo6 {
public static void main(String[] args)
{
Level level = Level.parse("500");
System.out.println("Level = " + level.toString());
Level level1 = Level.parse("FINE");
System.out.println("Level = " + level1.toString());
Level level2 = level.parse ("OFF");
System.out.println(level2.toString());
}
}
Die Ausgabe ist:
Level = FINE
Level = FINE
OFF
9. parse()-Methode von Instant
Die Klasse Instant modelliert einen einzelnen momentanen Punkt auf der Zeitachse. Du kannst sie für die Aufzeichnung von Ereignis-Zeitstempeln in deiner App verwenden. Instant parse() ruft einen Instant-Wert aus einem Textwert ab. Der String wird später als UTC-Zeitzonenwert gespeichert. Das System verwendet DateTimeFormatter.ISO_INSTANT wie 2020-10-14T11:28:15.00Z. Hier ist die Syntax der Methode Instant parse():
public static Instant parse(CharSequence text)
Um eine Zeichenkette zu analysieren und einen Moment zu erhalten, muss ein Entwickler sicherstellen, dass die Zeichenkette einen Text enthält. Wenn er null ist, erhältst du eine DateTimeException.
Hier ist ein Beispiel für die Verwendung von Instant Parse in Java:
import java.time.Instant;
public class ParseDemo8 {
public static void main(String[] args) {
Instant instant = Instant.parse("2020-10-14T10:37:30.00Z");
System.out.println(instant);
}
}
Die Ausgabe ist:
2020-10-14T10:37:30Z
10. parse()-Methode von NumberFormat
Die Klasse java.text.NumberFormat wird verwendet, um Zahlen zu formatieren. NumberFormat parse() ist eine Standardmethode dieser Klasse. Die Methode parse() der Klasse NumberFormat wandelt eine Zeichenkette in eine Zahl um. Entwickler benutzen sie, um eine Zeichenkette in ihre Bestandteile zu zerlegen. Das Parsen beginnt am Anfang des Strings. Wenn du setParseIntegerOnly (true) aufrufst, bevor du die Methode parse () aufrufst, wie im folgenden Beispiel gezeigt, wird nur der ganzzahlige Teil der Zahl umgewandelt. Hier ist die Syntax von NumberFormat parse():
public Number parse(String str)
Als Parameter akzeptiert die Funktion Strings. Der Rückgabewert des Parsens ist ein numerischer Wert. Wenn ein String-Anfang nicht geparst werden kann, erhältst du eine ParseException-Meldung.
Für die Anwendung der Methode NumberFormat parse() schau dir das folgende Beispiel an:
import java.text.NumberFormat;
import java.text.ParseException;
public class ParseDemo9 {
public static void main(String[] args) throws ParseException {
NumberFormat numberFormat = NumberFormat.getInstance();
System.out.println(numberFormat.parse("3,141592"));
numberFormat.setParseIntegerOnly(true);
System.out.println(numberFormat.parse("3,141592"));
}
}
Die Ausgabe ist:
3.141592
3
GO TO FULL VERSION