CodeGym /Java blog /Véletlen /11 parse() metódus Java-ban példákkal
John Squirrels
Szint
San Francisco

11 parse() metódus Java-ban példákkal

Megjelent a csoportban
Az elemzés a legáltalánosabb értelmében a szükséges információk kinyerése valamilyen adatból, leggyakrabban szöveges adatból. Mi az a parse a Java-ban? Sok Java osztály rendelkezik a parse() metódussal. Általában a parse() metódus valamilyen karakterláncot kap bemenetként, "kivonja" belőle a szükséges információkat és a hívó osztály objektumává alakítja. Például kapott egy karakterláncot, és visszaadta azt a dátumot, amely ebben a karakterláncban "bújt". Ebben a bejegyzésben a parse() 10 hasznos változatát tekintjük át .

0. parseInt()

Kezdjük az egyik legnépszerűbb parse() metódussal, ami nem éppen parse() , hanem parseInt() . A Java parseInt () metódus a primitív adattípus lekérésére szolgál egy adott karakterláncból. Más szavakkal, egy karakterláncot számmá alakít. parseInt () egy vagy két argumentummal rendelkezhet. Íme a parseInt() szintaxisa :

static int parseInt(String s)
static int parseInt(String s, int radix)
Ahol s az előjeles decimális értéket képviselő karakterlánc, a radix pedig a numerikus rendszer alapját. Ne feledje, hogy nincs alapértelmezett alapérték – 2 és 36 között kell megadnia egy értéket. Íme egy példa. Hogyan kell értelmezni a ParseInt() segítségével:

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));
         
       }
   }
A kimenet a következő:
12 12,0 4 65

1. Period parse() metódus

A Period egy Java osztály, amely egy időmennyiséget modellezi években, hónapokban és napokban, például „3 év, 5 hónap és 2 nap”. Van egy parse() metódusa, amellyel pontot kaphat egy szövegből. Íme a period parse() szintaxisa

public static Period parse(CharSequence text)
A CharSequence egy interfész, amelyet a Strings valósít meg. Tehát használhatja a Stringeket szövegelemként a parse() metódusban. Természetesen a karakterláncnak megfelelő formátumban kell lennie ahhoz, hogy egy Period osztályú objektumot adjon vissza. Ez a formátum a PnYnMnD . Ahol Y jelentése „év”, M – „hónap”, D – „nap”. N az egyes periódusértékeknek megfelelő szám.
  • A metódusnak egy paramétere van – egy szöveges érték.
  • A Parse() egy Period értéket ad vissza, ahol egy karakterlánc értéke paraméterré válik.
  • Kivételként a period parse() visszaadhatja a DateTimeParseException értéket, ha a karakterlánc értéke nem felel meg egy pont szerkezetének.
Íme egy példa a Period parse() használatára a valós környezetben:

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");
   }
}
	} 
} 
A kimenet a következő:
az életkor: 17 év 9 hónap 5 nap

2.SimpleDateFormat Parse() metódus

A SimpleDateFormat egy osztály, amelyet a dátumok nyelv- és területérzékeny módon történő formázására és elemzésére használnak. A SimpleDateFormat parse() metódus lebontja a karakterláncot dátum tokenekre, és a megfelelő formátumban adja vissza a Data értéket. A metódus a karakterlánc elemzését egy fejlesztő által meghatározott indexen kezdi meg. Ez a SimpleDateFormat parse() szintaxisa :

public Date parse(String the_text, ParsePosition position)
A módszernek két paramétere van:
  • Position: a kezdő indexben lévő adatok, amelyek mindig a ParsePosition objektumtípus.
  • the_text: azt a karakterláncot határozza meg, amelyet a metódus elemezni fog, és egy String típusú érték.
Ezt a módszert pozíció deklaráció nélkül is használhatja. Ebben az esetben az adatok nulla indexről indulnak. A SimpleDateFormat parse() dátumot vagy null értéket ad vissza (ha a karakterlánc feldolgozása hiba miatt nem történt meg). Íme egy példa a SimpleDateFormat parse() megvalósítására:

// 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);
   }
}
A kimenet a következő:
szerda október 14. 00:00:00 EEST 2020 szerda október 14 00:00:00 EEST 2020 szerda október 14 00:00:00 EEST 2020 vasárnap október 04 00:00:00 EEST 2020 null
Az utolsó nulla, mert nincs dátumminta az 5. pozíciótól kezdve. Egyébként, ha megpróbálja elemezni a dátumot5 pozíció nélkül, például Date date5 = simpleDateFormat2.parse(myString) , akkor kivételt kap:
Kivétel a "main" szálban java.text.ParseException: Nem értelmezhető dátum: "itt a dátum: 14/010/2020" itt: java.base/java.text.DateFormat.parse(DateFormat.java:396) itt: ParseDemo2.main (ParseDemo2.java:22)

3. LocalDate parse() metódus

A LocalDate egy olyan osztály, amely a Java 8-ban jelent meg, és olyan dátumot jelent, mint az év-hónap-nap (az év napja, a hét napja és az év hete is elérhető). A LocalDate nem jelent időt vagy időzónát. A LocalDate parse() metódusnak két változata van. Mindkettő segít átalakítani egy karakterláncot egy új Java 8 dátum API-vá – java.time.LocalDate .

elemzés (CharSequence szöveg, DateTimeFormatter, formázó)

Ez a módszer egy karakterláncot elemez egy adott formázó segítségével, hogy megkapja a LocalDate példányát. Íme a módszer szintaxisa:

public static LocalTime parse(CharSequence text,
                              DateTimeFormatter formatter)
A módszernek két paramétere van: az elemezni kívánt szöveg és a fejlesztő által alkalmazott formázó. Visszatérési értékként a metódus egy LocalTime objektumot ad vissza, amelyet a rendszer helyi napidőként ismer fel. Ha a szöveges érték nem ment át az elemzésen, a rendszer a DayTimeParseException kivételt dobja. Vegyünk egy kódpéldát a LocalDate parse() használatára két paraméterrel:

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));
   }
}
A kimenet a következő:
elemzett helyi dátum: 2020-10-14 formázott helyi dátum: 2020.10.14.
Egy paraméterrel rendelkező LocalDate parse() metódus a következő szintaxissal rendelkezik:

public static LocalTime parse(CharSequence text)
Ez a módszer nem igényel formázó megadását. Miután a fejlesztő beírja a karakterlánc-értékeket a zárójelbe, a rendszer automatikusan a DateTimeFormatter.ISO_LOCAL_DATE értéket fogja használni. Ennek a metódusnak egyetlen paramétere van – egy CharSequence szöveg. Itt használhatja a karakterlánc értékét. Győződjön meg arról, hogy nem nulla, és tiszteletben tartja a formázó szerkezetét. Ha nincs mód egy karakterlánc elemzésére, a fejlesztő megkapja a DateTimeExceptionAlert figyelmeztetést. Íme egy példa a LocalDate parse() alkalmazásra:

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);
       }
   }
A kimenet a következő:
HelyiDátum: 2020-10-14

4. LocalDateTime parse() metódus

A LocalDateTime egy dátum-idő objektum, amely egy dátum-időt reprezentál, amelyet gyakran év-hónap-nap-óra-perc-másodpercként tekintenek meg. A fejlesztők más dátum- és időmezőket is használhatnak (az év napja, a hét napja és az év hete). Ez az osztály változhatatlan. Az idő nanoszekundumos pontossággal van ábrázolva. Például eltárolhatja a „2020. november 17., 13:30.30.123456789” értéket a LocalDateTime-ban. Ez az osztály nem egy időzóna ábrázolásáról szól. Inkább egy szabványos dátumábrázolás plusz a helyi idő. A LocalDateTime parse() metódus két változatban ábrázolva:
  • static LocalDateTime parse (CharSequence text) a LocalDateTime egy példányát adja vissza egy szöveges karakterláncból, például 2007-12-03T10:15:30.
  • statikus LocalDateTime elemzés (CharSequence szöveg, DateTimeFormatter formázó) a LocalDateTime egy példányát adja vissza egy szöveges karakterláncból egy adott formázó használatával.
Íme egy példa a LocalDateTime parse() metódusra:

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);
       }
   }
A kimenet a következő:
HelyiDátumIdő: 2020-11-17T19:34:50.630

5. ZonedDateTime parse() metódus

A ZonedDateTime osztály egy dátum-időt jelent időzónával. Ez az osztály változhatatlan. A dátum- és időmezőket nanomásodperces pontossággal, valamint egy időzónát tárol, zónaeltolásokkal, amelyek a kétértelmű helyi dátum-időket kezelik. Tehát ha meg kell tartania egy értéket, például „2020. október 14. 17:50.30.123456789 +02:00 az európai/párizsi időzónában”, használhatja a ZonedDateTime-ot. Az osztályt gyakran használják a helyi időalapú adatok manipulálására. A ZondeDateTime parse() egy elemző, amely a karakterláncot tokenekre bontja az ISO-8061 rendszerben. Íme egy példa az elemzés után kapott értékre:
2020-04-05T13:30:25+01:00 Európa/Róma
Akkor használatos, amikor nagy pontosságú adatokra van szükség (végül is a kapott adatok nanoszekundumig pontosak). Az osztályt gyakran használják a helyi időalapú adatok manipulálására. Vessünk egy pillantást a ZonedDateTime parse() metódus általános szintaxisára, amelyet a fejlesztők használnak a karakterláncok értékeinek ZonedDateTime osztályba való konvertálására.

public static ZonedDateTime parse(CharSequence text)
A metódus egyetlen paramétere egy karakterlánc. Visszatérési értékként ZonedDateTime formátumú objektumok egy vagy sorozatát kapja meg. Ha hiba történik az elemzés során, vagy ez lehetetlen, akkor a metódus a DateTimeParseException értéket adja vissza. Van egy parse() metódus is, két változóval.

public static ZonedDateTime parse(CharSequence text, DateFormatter formatter)
Ez a módszer a ZonedDateTime egy példányát szöveges értékből szerzi be egy adott formázó segítségével. Alapértelmezés szerint az egyparaméteres metódust, a DateTimeFormatter.ISO_LOCAL_TIME formázót használják. Vessünk egy pillantást a ZonedDateTime parse() használati esetére:

// 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);
   }
}
A kimenet a következő:
2020-10-15T10:15:30+01:00 2020-10-15T13:30:25+01:00

6. LocalTime parse() metódus

A Helyi idő osztály egy időt jelöl, amelyet gyakran óra-perc-másodpercként tekintenek. Ez az osztály is megváltoztathatatlan, például a ZonedDateTime.Time nanoszekundumos pontossággal van ábrázolva. Például a „13:45.30.123456789” érték eltárolható a LocalTime-ban. Két LocalTime parse() metódus létezik , egy és két paraméterrel. Nézzük mindkettőt:

public static LocalTime parse(CharSequence text)
A LocalTime parse()-t csak egy paraméterrel használhatja , az elemezni kívánt karakterlánccal. Ebben az esetben alapértelmezés szerint a DateTimeFormatter.ISO_LOCAL_TIME formátumot használja.

Method with two parameters has the next syntax: 
public static LocalTime parse(CharSequence text,
                              DateTimeFormatter formatter)
Lekéri a LocalTime példányát egy szöveges értékből egy adott formázó segítségével. Mindkét módszer a LocalTime értéket adja vissza óó/mm/mp formátumban. Vigyázzon a DateTimeParceException riasztásokra. Ezek azt jelentik, hogy a karakterlánc szövegének formátuma nem egyezik meg a LocalTime objektumok formátumával. Íme egy példa a LocalTime parse() használatára az éles környezetben:

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. MessageFormat Parse() metódus

A MessageFormat kiterjeszti a Format osztályt. A Format egy absztrakt alaposztály a területi beállításokra érzékeny adatok (dátumok, üzenetek és számok) formázására. A MessageFormat beszerez néhány objektumot, és formázza azokat. Ezután a megfelelő helyeken beszúrja a formázott karakterláncokat a mintába. A MessageFormat parse() karakterlánc-értéket kap, ha adott az index kezdete. Íme a módszer általános szintaxisa:

public Object[] parse(String source, ParsePosition position)
Ahol a forrás egy értelmezendő karakterlánc, a pozíció pedig az elemzés kezdő indexe. Íme egy példa a MessageFormat parse() metódus működésére:

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. Level parse() metódus

Amikor egy programozó naplózót használ egy üzenet naplózására, az egy bizonyos naplózási szinttel kerül naplózásra. Hét beépített naplószint van:
  • SZIGORÚ
  • FIGYELEM
  • INFO
  • CONFIG
  • BÍRSÁG
  • FINOMBB
  • LEGJOBB
Ezenkívül vannak további OFF szintek, amelyekkel kikapcsolhatja a naplózást, és ALL, amelyekkel engedélyezheti az összes üzenet naplózását. A naplózási szintet a java.util.logging.Level osztály képviseli . A szintosztály mind a hét szinthez tartalmaz egy konstanst. Tehát ezeknek a konstansoknak az egyikét kell használnia, beleértve az All és OFF értéket, miközben üzenetet naplóz egy naplózóba. Mindezek a szintek is néhány egész számra inicializálva. Például a FINE inicializálása 500. A Level parse() metódus egy szöveges értékből elemzi a szükséges információkat, és egy Level objektumot ad vissza. Íme a level parse() metódus szintaxisa:

public static Level parse(String name)
A metódus paramétere a fejlesztő által elemezni kívánt karakterlánc neve. Ez lehet a szint neve, inicializáló neve vagy más egész szám. Cserébe a programozó egy Level name értéket kap, amely megfelel a kezdeti karakterlánc értékének. Ha az argumentum olyan szimbólumokat tartalmaz, amelyeket nem lehet elemezni, a rendszer az IllegalArgumentException kivételt dobja. Ha egy karakterlánc nem tartalmaz értékeket, a fejlesztő NullPointerException-t kap. Íme egy kódrészlet, amely bemutatja a Level parse() megvalósítását .

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());
   }
}
A kimenet a következő:
Szint = FINE Szint = FINE KI

9. Azonnali parse() metódus

Az azonnali osztály egyetlen pillanatnyi pontot modellez az idővonalon. Használhatja eseményidőbélyegek rögzítésére az alkalmazásban. Az Instant parse() azonnali értéket kap egy szöveges értékből. A karakterlánc később UTC időzóna értékként kerül tárolásra. A rendszer a DateTimeFormatter.ISO_INSTANT fájlt használja, például 2020-10-14T11:28:15.00Z. Íme az Instant parse() metódus szintaxisa:

public static Instant parse(CharSequence text)
Egy karakterlánc elemzéséhez és azonnali megjelenítéséhez a fejlesztőnek meg kell győződnie arról, hogy a karakterlánc tartalmaz-e szöveget. Abban az esetben, ha ez nulla, DateTimeException kivételt kap. Íme egy példa az Instant parse használatára Java-ban:

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);
       }
   }
A kimenet a következő:
2020-10-14T10:37:30Z

10. NumberFormat parse() metódus

A java.text.NumberFormat osztály a számok formázására szolgál. A NumberFormat parse() az osztály alapértelmezett metódusa. A NumberFormat osztály parse () metódusa egy karakterláncot számmá alakít. A fejlesztők arra használják, hogy lebontsák a karakterláncot a komponensszámokra. Az elemzés a karakterlánc elejétől kezdődik. Ha a következő példában látható módon a setParseIntegerOnly (true) függvényt a parse () metódus meghívása előtt hívja meg , akkor a számnak csak az egész része konvertálódik. Íme a NumberFormat parse() szintaxisa :

public Number parse(String str)
Paraméterként a függvény karakterláncokat fogad el. Az elemzés visszatérési értéke egy numerikus érték. Ha egy karakterlánc kezdete nem értelmezhető, ParseException figyelmeztetést kap. A NumberFormat parse() metódus alkalmazásának megtekintéséhez vessen egy pillantást az alábbi példára:

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"));
       }
   }
A kimenet a következő:
3,141592 3

Következtetés

A fejlesztők számos elemzési módszert használhatnak a karakterláncok különféle adattípusokká alakítására. Bár az emlékezés fárasztónak tűnhet, a parancsok ilyen sokfélesége nagy rugalmasságot és pontosságot biztosít a fejlesztőknek. Ügyeljen arra, hogy gyakorolja az adatelemzést, hogy emlékezzen a szintaxisra, és ne felejtse el, hogy mely paraméterek elengedhetetlenek az egyes módszerekhez.
Hozzászólások
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION