CodeGym /Java Blog /무작위의 /예제가 포함된 Java의 11가지 parse() 메서드
John Squirrels
레벨 41
San Francisco

예제가 포함된 Java의 11가지 parse() 메서드

무작위의 그룹에 게시되었습니다
가장 일반적인 의미의 구문 분석은 일부 데이터, 대부분 텍스트 데이터에서 필요한 정보를 추출하는 것입니다. Java에서 구문 분석이란 무엇입니까? parse() 메서드가 있는 많은 Java 클래스가 있습니다 . 일반적으로 parse() 메서드는 일부 문자열을 입력으로 받고 필요한 정보를 "추출"하여 호출 클래스의 객체로 변환합니다. 예를 들어 문자열을 수신하고 이 문자열에서 "숨겨진" 날짜를 반환했습니다. 이 게시물에서는 parse() 의 10가지 유용한 변형을 살펴보겠습니다 .

0. 파싱인트()

가장 인기 있는 parse() 메서드 중 하나인 정확히 parse() 가 아니라 parseInt() 부터 시작하겠습니다 . Java parseInt() 메서드는 특정 문자열에서 기본 데이터 유형을 가져오는 데 사용됩니다. 즉, 문자열을 숫자로 변환합니다. parseInt()는 하나 또는 두 개의 인수를 가질 수 있습니다. 다음은 parseInt() 구문입니다 .

static int parseInt(String s)
static int parseInt(String s, int radix)
여기서 s 는 부호 있는 10진수 값을 나타내는 문자열이고 기수는 수치 체계의 기본입니다. 기본 기본값이 없다는 점에 유의하세요. 2에서 36 사이의 값을 입력해야 합니다. 다음은 예입니다. 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));
         
       }
   }
출력은 다음과 같습니다.
12 12.0 4 65

1. 기간 parse() 메서드

Period 는 "3년 5개월 2일"과 같이 년, 월, 일로 시간의 양을 모델링하는 Java 클래스입니다. 텍스트에서 마침표를 가져오는 parse() 메서드가 있습니다 . 마침표 parse() 구문은 다음과 같습니다.

public static Period parse(CharSequence text)
CharSequence는 문자열로 구현된 인터페이스입니다. 따라서 parse() 메서드 에서 문자열을 텍스트 요소로 사용할 수 있습니다 . 물론 문자열은 Period 클래스의 개체를 반환하는 적절한 형식이어야 합니다. 이 형식은 PnYnMnD 입니다 . 여기서 Y는 "연도", M은 "월", D는 "일"을 나타냅니다. N은 각 기간 값에 해당하는 숫자입니다.
  • 메서드에는 하나의 매개변수(텍스트 값)가 있습니다.
  • Parse() 는 문자열 값이 매개변수가 되는 기간 값을 반환합니다.
  • 예외적으로 기간 parse()는 문자열 값이 기간의 구조를 충족하지 않는 경우 DateTimeParseException을 반환할 수 있습니다.
다음은 실제 컨텍스트에서 Period parse() 를 사용하는 예입니다 .

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");
   }
}
	} 
} 
출력은 다음과 같습니다.
나이: 17세 9개월 5일

2.SimpleDateFormat Parse() 메서드

SimpleDateFormat은 로케일 구분 방식으로 날짜 형식을 지정하고 구문 분석하는 데 사용되는 클래스입니다. SimpleDateFormat parse() 메서드는 문자열을 날짜 토큰으로 분해하고 해당 형식의 데이터 값을 반환합니다. 메서드는 개발자가 정의한 인덱스에서 문자열 구문 분석을 시작합니다. 이것은 SimpleDateFormat parse() 구문입니다 .

public Date parse(String the_text, ParsePosition position)
이 메서드에는 다음과 같은 두 가지 매개변수가 있습니다.
  • 위치: 항상 ParsePosition 개체 유형인 시작 인덱스의 데이터입니다.
  • the_text: 메서드가 구문 분석할 문자열을 정의하며 문자열 유형 값입니다.
위치 선언 없이 이 방법을 사용할 수 있습니다. 이 경우 데이터는 0 인덱스에서 시작합니다. SimpleDateFormat parse()는 날짜 또는 null 값을 반환합니다(오류로 인해 문자열이 처리되지 않은 경우). 다음은 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);
   }
}
출력은 다음과 같습니다.
2020년 10월 14일 수요일 00:00:00 EEST 2020년 10월 14일 수요일 00:00:00 EEST 2020년 10월 14일 수요일 00:00:00 EEST 2020년 10월 4일 일요일 00:00:00 EEST 2020 null
마지막 것은 5번째 위치부터 시작하는 날짜 패턴이 없기 때문에 null입니다. 그런데 Date date5 = simpleDateFormat2.parse(myString) 와 같이 위치 없이 date5를 구문 분석하려고 하면 예외가 발생합니다.
스레드 "main" java.text.ParseException의 예외: 구문 분석할 수 없는 날짜: ParseDemo2.main의 java.base/java.text.DateFormat.parse(DateFormat.java:396)에서 "여기 날짜: 14/010/2020" (ParseDemo2.java:22)

3. LocalDate parse() 메서드

LocalDate는 년-월-일과 같은 날짜를 나타내기 위해 Java 8에 등장한 클래스입니다(연중 일, 요일 및 주에도 액세스 가능). LocalDate는 시간이나 표준 시간대를 나타내지 않습니다. LocalDate parse() 메서드에는 두 가지 변형이 있습니다. 둘 다 문자열을 새로운 Java 8 날짜 API( java.time.LocalDate ) 로 변환하는 데 도움이 됩니다 .

구문 분석(CharSequence 텍스트, DateTimeFormatter, 포맷터)

이 메서드는 특정 포맷터를 사용하여 문자열을 구문 분석하여 LocalDate의 인스턴스를 가져옵니다. 방법의 구문은 다음과 같습니다.

public static LocalTime parse(CharSequence text,
                              DateTimeFormatter formatter)
메서드에는 두 가지 매개변수가 있습니다. 구문 분석할 텍스트와 개발자가 적용할 포맷터입니다. 반환 값으로 메서드는 현지 낮 시간으로 인식될 LocalTime 개체를 반환합니다. 텍스트 값이 구문 분석을 통과할 수 없으면 시스템에서 DayTimeParseException이 발생합니다. 두 개의 매개 변수와 함께 LocalDate parse() 를 사용하는 코드 예제를 살펴보겠습니다 .

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));
   }
}
출력은 다음과 같습니다.
구문 분석된 현지 날짜: 2020-10-14 형식의 현지 날짜: 2020년 10월 14일
하나의 매개 변수가 있는 LocalDate parse() 메서드에는 다음 구문이 있습니다.

public static LocalTime parse(CharSequence text)
이 방법은 포맷터를 지정할 필요가 없습니다. 개발자가 괄호 안에 문자열 값을 입력하면 시스템에서 자동으로 DateTimeFormatter.ISO_LOCAL_DATE를 사용합니다. 이 메서드에는 CharSequence 텍스트라는 단일 매개 변수가 있습니다. 여기서 문자열 값을 사용할 수 있습니다. null이 아닌지 확인하고 포맷터의 구조를 존중합니다. 문자열을 구문 분석할 방법이 없는 경우 개발자는 DateTimeExceptionAlert를 받습니다. 다음은 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);
       }
   }
출력은 다음과 같습니다.
현지 날짜 : 2020-10-14

4. LocalDateTime parse() 메서드

LocalDateTime 연-월-일-시-분-초로 표시되는 날짜-시간을 나타내는 날짜-시간 개체입니다. 또한 개발자는 다른 날짜 및 시간 필드(연중 일, 요일 및 주)를 사용할 수 있습니다. 이 클래스는 변경할 수 없습니다. 시간은 나노초 정밀도로 표현됩니다. 예를 들어 LocalDateTime에 "2020년 11월 17일 13:30.30.123456789" 값을 저장할 수 있습니다. 이 클래스는 시간대를 나타내는 것이 아닙니다. 오히려 표준 날짜 표현에 현지 시간을 더한 것입니다. 두 가지 변형으로 표현되는 LocalDateTime parse() 메서드:
  • static LocalDateTime parse(CharSequence text)는 2007-12-03T10:15:30과 같은 텍스트 문자열에서 LocalDateTime의 인스턴스를 반환합니다.
  • static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter)는 특정 포맷터를 사용하여 텍스트 문자열에서 LocalDateTime의 인스턴스를 반환합니다.
다음은 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);
       }
   }
출력은 다음과 같습니다.
LocalDateTime: 2020-11-17T19:34:50.630

5. ZonedDateTime parse() 메소드

ZonedDateTime 클래스는 시간대가 있는 날짜-시간을 나타냅니다. 이 클래스는 변경할 수 없습니다. 모호한 현지 날짜-시간을 처리하는 데 사용되는 구역 오프셋과 함께 날짜 및 시간 필드를 나노초의 정밀도와 시간대에 저장합니다. 따라서 "2020년 10월 14일 17:50.30.123456789 +02:00 유럽/파리 시간대"와 같은 값을 유지해야 하는 경우 ZonedDateTime을 사용할 수 있습니다. 이 클래스는 종종 로컬 시간 기반 데이터를 조작하는 데 사용됩니다. ZondeDateTime parse() 는 ISO-8061 시스템에서 문자열을 토큰으로 분해하는 파서입니다. 다음은 구문 분석 후 얻을 수 있는 값의 예입니다.
2020-04-05T13:30:25+01:00 유럽/로마
고정밀 데이터가 필요할 때마다 사용됩니다(결국 얻은 데이터는 최대 나노초까지 정확함). 이 클래스는 종종 로컬 시간 기반 데이터를 조작하는 데 사용됩니다. 문자열 값을 ZonedDateTime 클래스로 변환하기 위해 개발자가 사용하는 ZonedDateTime parse() 메서드 의 일반 구문을 살펴보겠습니다 .

public static ZonedDateTime parse(CharSequence text)
메소드가 사용하는 유일한 매개변수는 문자열 텍스트입니다. 반환 값으로 하나 또는 ZonedDateTime 형식의 일련의 개체를 가져옵니다. 구문 분석 중에 오류가 발생하거나 불가능한 경우 우선 이 메서드는 DateTimeParseException을 반환합니다. 또한 두 개의 변수가 있는 parse() 메서드가 있습니다 .

public static ZonedDateTime parse(CharSequence text, DateFormatter formatter)
이 메서드는 특정 포맷터를 사용하여 텍스트 값에서 ZonedDateTime 인스턴스를 가져옵니다. 하나의 매개 변수가 있는 메서드인 DateTimeFormatter.ISO_LOCAL_TIME 포맷터가 기본적으로 사용됩니다. 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);
   }
}
출력은 다음과 같습니다.
2020-10-15T10:15:30+01:00 2020-10-15T13:30:25+01:00

6. LocalTime parse() 메서드

Class LocalTime은 종종 시간-분-초로 표시되는 시간을 나타냅니다. 이 클래스는 ZonedDateTime과 같이 변경할 수 없습니다. 시간은 나노초 정밀도로 표시됩니다. 예를 들어 "13:45.30.123456789" 값을 LocalTime에 저장할 수 있습니다. 하나와 두 개의 매개 변수가 있는 두 개의 LocalTime parse() 메서드가 있습니다 . 두 가지를 모두 살펴보겠습니다.

public static LocalTime parse(CharSequence text)
LocalTime parse()는 구문 분석할 문자열이라는 하나의 매개 변수와 함께 사용할 수 있습니다 . 이 경우 포맷터 DateTimeFormatter.ISO_LOCAL_TIME이 기본적으로 사용됩니다.

Method with two parameters has the next syntax: 
public static LocalTime parse(CharSequence text,
                              DateTimeFormatter formatter)
특정 포맷터를 사용하여 텍스트 값에서 LocalTime 인스턴스를 얻습니다. 두 메서드 모두 hh/mm/ss 형식의 LocalTime 값을 반환합니다. DateTimeParceException 경고에 주의하십시오. 이는 문자열 텍스트의 형식이 LocalTime 개체의 형식과 일치하지 않음을 의미합니다. 다음은 프로덕션 환경에서 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. MessageFormat Parse() 메서드

MessageFormat은 Format 클래스를 확장합니다. Format은 로케일에 민감한 데이터(날짜, 메시지 및 숫자)의 형식을 지정하기 위한 추상 기본 클래스입니다. MessageFormat은 일부 객체를 가져오고 형식을 지정합니다. 그런 다음 서식이 지정된 문자열을 패턴의 적절한 위치에 삽입합니다. MessageFormat parse()는 색인 시작이 주어지면 문자열 값을 얻는 데 사용됩니다. 방법의 일반적인 구문은 다음과 같습니다.

public Object[] parse(String source, ParsePosition position)
여기서 source는 구문 분석할 문자열이고 position은 구문 분석의 시작 인덱스입니다. 다음은 MessageFormat parse() 메서드 작동 의 예입니다 .

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() 메서드

프로그래머가 로거를 사용하여 메시지를 기록하면 특정 로그 수준으로 기록됩니다. 다음과 같은 7가지 기본 제공 로그 수준이 있습니다.
  • 극심한
  • 경고
  • 정보
  • 구성
  • 괜찮은
  • 미세한
  • 최고급
또한 로깅을 해제하는 데 사용할 수 있는 추가 수준 OFF와 모든 메시지의 로깅을 활성화하는 데 사용할 수 있는 ALL이 있습니다. 로그 레벨은 java.util.logging.Level 클래스로 표시됩니다 . 레벨 클래스에는 이러한 7개 레벨 모두에 대한 상수가 포함되어 있습니다. 따라서 로거에 메시지를 기록하는 동안 All 및 OFF를 포함하여 이러한 상수 중 하나를 사용합니다. 또한 이러한 모든 수준은 일부 정수로 초기화되었습니다. 예를 들어 FINE은 500으로 초기화됩니다. Level parse() 메서드는 텍스트 값에서 필요한 정보를 구문 분석하고 Level 객체를 반환합니다. 레벨 parse() 메서드 의 구문은 다음과 같습니다 .

public static Level parse(String name)
메서드의 매개변수는 개발자가 구문 분석하려는 문자열의 이름입니다. 레벨의 이름, 초기화 이름 또는 기타 정수일 수 있습니다. 그 대가로 프로그래머는 초기 문자열에 해당하는 레벨 이름 값을 얻습니다. 인수에 구문 분석이 불가능한 기호가 포함된 경우 시스템에서 IllegalArgumentException이 발생합니다. 문자열에 값이 없으면 개발자에게 NullPointerException이 발생합니다. 다음은 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());
   }
}
출력은 다음과 같습니다.
레벨 = FINE 레벨 = FINE OFF

9. 인스턴트 parse() 메서드

인스턴트 클래스는 타임라인의 단일 순간 지점을 모델링합니다. 앱에서 이벤트 타임스탬프를 기록하는 데 사용할 수 있습니다. Instant parse()는 텍스트 값에서 Instant 값을 가져옵니다. 문자열은 나중에 UTC 시간대 값으로 저장됩니다. 시스템은 2020-10-14T11:28:15.00Z와 같은 DateTimeFormatter.ISO_INSTANT를 사용합니다. 다음은 Instant parse() 메서드 의 구문입니다 .

public static Instant parse(CharSequence text)
문자열을 구문 분석하고 인스턴트를 얻으려면 개발자는 문자열에 일부 텍스트가 포함되어 있는지 확인해야 합니다. null인 경우 DateTimeException이 발생합니다. 다음은 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);
       }
   }
출력은 다음과 같습니다.
2020-10-14T10:37:30Z

10. NumberFormat parse() 메서드

java.text.NumberFormat 클래스는 숫자 형식을 지정 하는 데 사용됩니다. NumberFormat parse()는 이 클래스의 기본 메서드입니다. NumberFormat 클래스의 parse () 메서드는 문자열을 숫자로 변환합니다. 개발자는 이를 사용하여 문자열을 구성 요소 번호로 분해합니다. 구문 분석은 문자열의 처음부터 시작됩니다. 다음 예제와 같이 parse() 메서드를 호출하기 전에 setParseIntegerOnly(true)를 호출 하면 숫자의 정수 부분만 변환됩니다. 다음은 NumberFormat parse() 구문입니다 .

public Number parse(String str)
함수는 매개변수로 문자열을 허용합니다. 구문 분석의 반환 값은 숫자 값입니다. 문자열 시작 부분을 구문 분석할 수 없으면 ParseException 경고가 표시됩니다. NumberFormat parse() 메서드 의 적용을 보려면 아래 예를 살펴보십시오.

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"));
       }
   }
출력은 다음과 같습니다.
3.141592 3

결론

개발자가 문자열을 다양한 데이터 유형으로 변환하는 데 사용할 수 있는 많은 구문 분석 방법이 있습니다. 명령을 기억하는 것이 지루해 보일 수 있지만 이러한 다양한 명령은 개발자에게 많은 유연성과 정확성을 제공합니다. 데이터 구문 분석을 사용하여 구문을 기억하고 각 메서드에 필수적인 매개 변수를 잊지 않도록 연습하십시오.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION