CodeGym /Blog Java /Ngẫu nhiên /11 phương thức parse() trong Java với các ví dụ

11 phương thức parse() trong Java với các ví dụ

Xuất bản trong nhóm
Phân tích cú pháp theo nghĩa chung nhất là trích xuất thông tin cần thiết từ một số phần dữ liệu, thường là dữ liệu văn bản. Phân tích cú pháp trong Java là gì? Có nhiều lớp Java có phương thức parse() . Thông thường, phương thức parse() nhận một số chuỗi làm đầu vào, "trích xuất" thông tin cần thiết từ nó và chuyển đổi nó thành một đối tượng của lớp đang gọi. Ví dụ: nó nhận được một chuỗi và trả về ngày "ẩn" trong chuỗi này. Trong bài đăng này, chúng ta sẽ xem xét 10 biến thể hữu ích của parse() .

0. parseInt()

Hãy bắt đầu từ một trong những phương thức parse() phổ biến nhất , đó không hẳn là parse() , mà là parseInt() . Phương thức parseInt() trong Java được sử dụng để lấy kiểu dữ liệu nguyên thủy từ một chuỗi cụ thể. Nói cách khác, nó chuyển đổi một chuỗi thành một số. parseInt() có thể có một hoặc hai đối số. Đây là cú pháp của parseInt() :

static int parseInt(String s)
static int parseInt(String s, int radix)
Trong đó s là chuỗi đại diện cho một giá trị thập phân có dấu và cơ số của một hệ thống số. Hãy nhớ rằng không có giá trị cơ sở mặc định — bạn cần nhập một giá trị trong phạm vi từ 2 đến 36. Đây là một ví dụ. Cách phân tích cú pháp với ParseInt():

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));
         
       }
   }
Đầu ra là:
12 12.0 4 65

1. Phương thức phân tích cú pháp ()

Thời gian là một lớp Java để mô hình hóa một lượng thời gian theo năm, tháng và ngày, chẳng hạn như “3 năm, 5 tháng và 2 ngày”. Nó có phương thức parse() để lấy dấu chấm từ văn bản. Đây là cú pháp của phân tích cú pháp thời gian()

public static Period parse(CharSequence text)
CharSequence là một Giao diện, được triển khai bởi Chuỗi. Vì vậy, bạn có thể sử dụng Chuỗi làm thành phần văn bản trong phương thức parse() . Chắc chắn rằng chuỗi phải ở định dạng phù hợp để trả về một đối tượng của lớp Chu kỳ. Định dạng này là PnYnMnD . Trong đó Y là viết tắt của “năm”, M — cho “tháng”, D — cho “ngày”. N là một số tương ứng với mỗi giá trị thời kỳ.
  • Phương thức này có một tham số — một giá trị văn bản.
  • Parse() trả về giá trị Chu kỳ trong đó giá trị của chuỗi trở thành tham số.
  • Như một ngoại lệ, phân tích cú pháp dấu chấm() có thể trả về DateTimeParseException nếu giá trị chuỗi không đáp ứng cấu trúc của dấu chấm.
Đây là một ví dụ về việc sử dụng Phân tích cú pháp thời kỳ () trong ngữ cảnh thế giới thực:

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");
   }
}
	} 
} 
Đầu ra là:
tuổi là: 17 Năm 9 Tháng 5 Ngày

2. Phương thức phân tích cú pháp SimpleDateFormat()

SimpleDateFormat là một lớp được sử dụng để định dạng và phân tích ngày theo cách nhạy cảm với ngôn ngữ. Phương thức SimpleDateFormat parse() ngắt một chuỗi thành các mã thông báo ngày và trả về một giá trị Dữ liệu ở định dạng tương ứng. Phương thức bắt đầu phân tích cú pháp chuỗi tại một chỉ mục, do nhà phát triển xác định. Đây là cú pháp của SimpleDateFormat parse() :

public Date parse(String the_text, ParsePosition position)
Phương thức có hai tham số:
  • Vị trí: dữ liệu tại chỉ mục bắt đầu luôn là loại đối tượng ParsePosition.
  • the_text: định nghĩa chuỗi mà phương thức sẽ phân tích cú pháp và là một giá trị kiểu Chuỗi.
Bạn có thể sử dụng phương pháp này mà không cần khai báo vị trí. Trong trường hợp này, dữ liệu bắt đầu từ chỉ số không. SimpleDateFormat parse() trả về một ngày hoặc một giá trị null (trong trường hợp chuỗi không được xử lý do lỗi). Đây là một ví dụ về triển khai SimpleDateFormat parse() :

// 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);
   }
}
Đầu ra là:
Thứ tư ngày 14 tháng 10 00:00:00 EEST 2020 Thứ tư ngày 14 tháng 10 00:00:00 EEST 2020 Thứ tư ngày 14 tháng 10 00:00:00 EEST 2020 Chủ nhật ngày 04 tháng 10 00:00:00 EEST 2020 null
Cái cuối cùng là null vì không có mẫu ngày nào bắt đầu từ vị trí thứ 5. Nhân tiện, nếu bạn cố phân tích cú pháp date5 mà không có vị trí, chẳng hạn như Date date5 = simpleDateFormat2.parse(myString) , bạn sẽ nhận được một ngoại lệ:
Ngoại lệ trong chuỗi "chính" java.text.ParseException: Ngày không thể phân tích: "đây là ngày: 14/010/2020" tại java.base/java.text.DateFormat.parse(DateFormat.java:396) tại ParseDemo2.main (ParseDemo2.java:22)

3. Phương thức phân tích cú pháp LocalDate()

LocalDate là một lớp xuất hiện trong Java 8 để biểu thị một ngày như năm-tháng-ngày (ngày trong năm, ngày trong tuần và tuần trong năm, cũng có thể được truy cập). LocalDate không đại diện cho thời gian hoặc múi giờ. Phương thức phân tích cú pháp LocalDate() có hai biến thể. Cả hai đều giúp chuyển đổi một chuỗi thành API ngày Java 8 mới — java.time.LocalDate .

phân tích cú pháp (Văn bản CharSequence, DateTimeFormatter, trình định dạng)

Phương pháp này phân tích cú pháp một chuỗi bằng cách sử dụng một trình định dạng cụ thể để lấy một phiên bản của LocalDate. Đây là cú pháp của phương thức:

public static LocalTime parse(CharSequence text,
                              DateTimeFormatter formatter)
Có hai tham số cho phương thức — văn bản sẽ được phân tích cú pháp và trình định dạng mà nhà phát triển sẽ áp dụng. Là một giá trị trả về, phương thức trả về một đối tượng LocalTime sẽ được nhận dạng là thời gian trong ngày của địa phương. Nếu giá trị văn bản không thể đi qua phân tích cú pháp, hệ thống sẽ ném DayTimeParseException. Hãy lấy một ví dụ về mã sử dụng LocalDate parse() với hai tham số:

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));
   }
}
Đầu ra là:
ngày địa phương được phân tích cú pháp: 2020-10-14 ngày địa phương được định dạng: 14/10/2020
Phương thức phân tích cú pháp LocalDate() với một tham số có cú pháp tiếp theo:

public static LocalTime parse(CharSequence text)
Phương pháp này không yêu cầu chỉ định một trình định dạng. Sau khi nhà phát triển nhập các giá trị chuỗi vào dấu ngoặc, hệ thống sẽ tự động sử dụng DateTimeFormatter.ISO_LOCAL_DATE. Phương thức này có một tham số duy nhất — một văn bản CharSequence. Bạn có thể sử dụng ở đây giá trị chuỗi. Đảm bảo rằng nó không rỗng và tôn trọng cấu trúc của bộ định dạng. Nếu không có cách nào để phân tích một chuỗi, nhà phát triển sẽ nhận được DateTimeExceptionAlert. Đây là một ví dụ về ứng dụng 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);
       }
   }
Đầu ra là:
Địa phươngNgày : 2020-10-14

4. Phương thức phân tích cú pháp LocalDateTime()

LocalDateTime một đối tượng ngày-giờ đại diện cho ngày-giờ được xem khá thường xuyên dưới dạng năm-tháng-ngày-giờ-phút-giây. Ngoài ra, các nhà phát triển có thể sử dụng các trường ngày và giờ khác (ngày trong năm, ngày trong tuần và tuần trong năm). Lớp này là bất biến. Thời gian được biểu diễn với độ chính xác nano giây. Ví dụ: bạn có thể lưu trữ giá trị "17nd November 2020 at 13:30.30.123456789" trong LocalDateTime. Lớp này không đại diện cho múi giờ. Nó đúng hơn là một đại diện ngày tiêu chuẩn cộng với giờ địa phương. Phương thức phân tích cú pháp LocalDateTime() được biểu thị bằng hai biến thể:
  • phân tích cú pháp LocalDateTime tĩnh(Văn bản CharSequence) trả về một phiên bản của LocalDateTime từ một chuỗi văn bản chẳng hạn như 2007-12-03T10:15:30.
  • phân tích cú pháp LocalDateTime tĩnh(Văn bản CharSequence, trình định dạng DateTimeFormatter) trả về một phiên bản của LocalDateTime từ một chuỗi văn bản bằng cách sử dụng một trình định dạng cụ thể.
Đây là một ví dụ về phương thức LocalDateTime parse() :

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);
       }
   }
Đầu ra là:
LocalDateTime là: 2020-11-17T19:34:50.630

5. Phương thức phân tích cú pháp ZonedDateTime()

Lớp ZonedDateTime đại diện cho thời gian ngày với múi giờ. Lớp này là bất biến. Nó lưu trữ các trường ngày và giờ với độ chính xác là nano giây và múi giờ, với phần bù múi giờ được sử dụng để xử lý ngày giờ địa phương không rõ ràng. Vì vậy, nếu bạn cần giữ một giá trị chẳng hạn như "14nd October 2020 at 17:50.30.123456789 +02:00 in the Europe/Paris time-zone", bạn có thể sử dụng ZonedDateTime. Lớp này thường được sử dụng để thao tác dữ liệu dựa trên thời gian cục bộ. ZondeDateTime parse() là trình phân tích cú pháp chia chuỗi thành các mã thông báo trong hệ thống ISO-8061. Đây là ví dụ về giá trị bạn sẽ nhận được sau khi phân tích cú pháp:
2020-04-05T13:30:25+01:00 Châu Âu/Rome
Nó được sử dụng bất cứ khi nào cần dữ liệu có độ chính xác cao (xét cho cùng, dữ liệu bạn nhận được chính xác đến từng nano giây). Lớp này thường được sử dụng để thao tác dữ liệu dựa trên thời gian cục bộ. Chúng ta hãy xem cú pháp chung của phương pháp phân tích ZonedDateTime() mà các nhà phát triển sử dụng để chuyển đổi các giá trị chuỗi thành lớp ZonedDateTime.

public static ZonedDateTime parse(CharSequence text)
Tham số duy nhất mà phương thức sử dụng là một chuỗi văn bản. Là một giá trị trả về, bạn sẽ nhận được một hoặc một loạt đối tượng ở định dạng ZonedDateTime. Nếu có lỗi trong quá trình phân tích cú pháp hoặc không thể bắt đầu, thì phương thức này sẽ trả về DateTimeParseException. Ngoài ra còn có một phương thức parse() với hai biến.

public static ZonedDateTime parse(CharSequence text, DateFormatter formatter)
Phương thức này lấy một phiên bản của ZonedDateTime từ một giá trị văn bản bằng cách sử dụng một trình định dạng cụ thể. Phương thức có một tham số, bộ định dạng DateTimeFormatter.ISO_LOCAL_TIME được sử dụng theo mặc định. Chúng ta hãy xem trường hợp sử dụng cho phân tích ZonedDateTime():

// 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);
   }
}
Đầu ra là:
2020-10-15T10:15:30+01:00 2020-10-15T13:30:25+01:00

6. Phương thức phân tích cú pháp LocalTime()

Lớp LocalTime đại diện cho thời gian, thường được xem là giờ-phút-giây. Lớp này cũng không thay đổi, chẳng hạn như ZonedDateTime.Time được biểu thị với độ chính xác nano giây. Ví dụ: giá trị "13:45.30.123456789" có thể được lưu trữ trong LocalTime. Có hai phương thức LocalTime parse() , với một và hai tham số. Chúng ta hãy xem xét cả hai:

public static LocalTime parse(CharSequence text)
Bạn có thể sử dụng LocalTime parse() chỉ với một tham số, chuỗi bạn muốn phân tích cú pháp. Trong trường hợp này, trình định dạng DateTimeFormatter.ISO_LOCAL_TIME được sử dụng theo mặc định.

Method with two parameters has the next syntax: 
public static LocalTime parse(CharSequence text,
                              DateTimeFormatter formatter)
Nó Lấy một thể hiện của LocalTime từ một giá trị văn bản bằng cách sử dụng một trình định dạng cụ thể. Cả hai phương thức đều trả về giá trị LocalTime ở định dạng hh/mm/ss. Coi chừng cảnh báo DateTimeParceException. Chúng có nghĩa là định dạng của văn bản chuỗi không tương ứng với định dạng của các đối tượng LocalTime. Đây là một ví dụ về việc sử dụng LocalTime parse() trong sản xuất:

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. Phương thức MessageFormat Parse()

MessageFormat mở rộng lớp Định dạng. Định dạng là một lớp cơ sở trừu tượng để định dạng dữ liệu nhạy cảm với ngôn ngữ (ngày, tin nhắn và số). MessageFormat lấy một số đối tượng và định dạng chúng. Sau đó, nó sẽ chèn các chuỗi đã định dạng vào mẫu ở những vị trí thích hợp. Phân tích cú pháp MessageFormat() được sử dụng để lấy giá trị chuỗi nếu bắt đầu chỉ mục. Đây là cú pháp chung của phương thức:

public Object[] parse(String source, ParsePosition position)
Trong đó nguồn là một chuỗi để phân tích cú pháp và vị trí là chỉ mục bắt đầu phân tích cú pháp. Đây là một ví dụ về phương thức MessageFormat parse() hoạt động:

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. Phương thức phân tích cấp độ()

Khi một lập trình viên sử dụng Trình ghi nhật ký để ghi lại một thông báo, nó sẽ được ghi lại với một mức độ nhật ký nhất định. Có bảy cấp độ nhật ký tích hợp:
  • NGHIÊM TRỌNG
  • CẢNH BÁO
  • THÔNG TIN
  • CẤU HÌNH
  • KHỎE
  • TINH THẦN
  • TỐT NHẤT
Ngoài ra, có các mức bổ sung TẮT có thể được sử dụng để tắt ghi nhật ký và TẤT CẢ có thể được sử dụng để kích hoạt ghi nhật ký tất cả các thư. Cấp độ nhật ký được đại diện bởi lớp java.util.logging.Level . Lớp cấp độ chứa một hằng số cho tất cả bảy cấp độ này. Vì vậy, bạn sử dụng một trong các hằng số này, bao gồm Tất cả và TẮT trong khi ghi thông báo vào Trình ghi nhật ký. Ngoài ra, tất cả các mức này được khởi tạo thành một số số nguyên. Ví dụ FINE được khởi tạo là 500. Phương thức Level parse() phân tích thông tin cần thiết từ một giá trị văn bản và trả về một đối tượng Level. Đây là cú pháp của phương thức parse() cấp độ :

public static Level parse(String name)
Tham số của một phương thức là tên của một chuỗi mà nhà phát triển muốn phân tích cú pháp. Nó có thể là tên của cấp độ, tên khởi tạo của nó hoặc một số số nguyên khác. Đổi lại, một lập trình viên nhận được một giá trị Tên cấp độ, tương ứng với giá trị của chuỗi ban đầu. Trong trường hợp đối số chứa các ký hiệu không thể phân tích cú pháp, hệ thống sẽ đưa ra IllegalArgumentException. Nếu một chuỗi không chứa giá trị, nhà phát triển sẽ nhận được NullPulumException. Đây là một đoạn mã cho thấy việc triển khai Level parse() .

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());
   }
}
Đầu ra là:
Cấp độ = FINE Cấp độ = FINE OFF

9. Phương thức parse() tức thì

Lớp tức thời mô hình một điểm tức thời duy nhất trên dòng thời gian. Bạn có thể sử dụng nó để ghi dấu thời gian sự kiện trong ứng dụng của mình. Instant parse() lấy giá trị Instant từ giá trị văn bản. Chuỗi này sau đó sẽ được lưu trữ dưới dạng Giá trị múi giờ UTC. Hệ thống sử dụng DateTimeFormatter.ISO_INSTANT chẳng hạn như 2020-10-14T11:28:15.00Z. Đây là cú pháp của phương thức Instant parse() :

public static Instant parse(CharSequence text)
Để phân tích cú pháp một chuỗi và nhận ngay lập tức, nhà phát triển cần đảm bảo rằng chuỗi đó chứa một số văn bản. Trong trường hợp nó là null, bạn sẽ nhận được một DateTimeException. Đây là một ví dụ về việc sử dụng Instant parse trong 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);
       }
   }
Đầu ra là:
2020-10-14T10:37:30Z

10. Phương thức phân tích cú pháp NumberFormat()

Lớp java.text.NumberFormat được sử dụng để định dạng số. NumberFormat parse() là một phương thức mặc định của lớp này. Phương thức parse () của lớp NumberFormat chuyển đổi một chuỗi thành một số. Các nhà phát triển sử dụng nó để ngắt một chuỗi thành các số thành phần của nó. Quá trình phân tích cú pháp bắt đầu từ đầu chuỗi. Nếu bạn gọi setParseIntegerOnly(true) trước khi gọi phương thức parse() , như trong ví dụ sau, thì chỉ phần nguyên của số được chuyển đổi. Đây là cú pháp của NumberFormat parse() :

public Number parse(String str)
Là một tham số, hàm chấp nhận các chuỗi. Giá trị trả về của phân tích cú pháp là một giá trị số. Nếu không thể phân tích cú pháp phần đầu của chuỗi, bạn sẽ nhận được cảnh báo ParseException. Để xem ứng dụng của phương thức NumberFormat parse() , hãy xem ví dụ bên dưới:

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"));
       }
   }
Đầu ra là:
3.141592 3

Phần kết luận

Có rất nhiều phương pháp phân tích cú pháp mà nhà phát triển có thể sử dụng để chuyển đổi chuỗi thành các loại dữ liệu khác nhau. Mặc dù việc ghi nhớ chúng có vẻ tẻ nhạt, nhưng sự đa dạng của các lệnh như vậy mang lại cho các nhà phát triển rất nhiều tính linh hoạt và chính xác. Đảm bảo thực hành sử dụng phân tích cú pháp dữ liệu để đảm bảo bạn nhớ cú pháp và không quên các tham số cần thiết cho từng phương thức.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION