CodeGym /Java Blog /ランダム /Java の 11 の parse() メソッドと例
John Squirrels
レベル 41
San Francisco

Java の 11 の parse() メソッドと例

ランダム グループに公開済み
最も一般的な意味での解析とは、あるデータ (ほとんどの場合はテキスト データ) から必要な情報を抽出することです。Javaの解析とは何ですか? parse()メソッドを持つ Java クラスは数多くあります。通常、parse()メソッドは入力として文字列を受け取り、そこから必要な情報を「抽出」し、それを呼び出しクラスのオブジェクトに変換します。たとえば、文字列を受け取り、この文字列内に「隠れている」日付を返します。この投稿では、 parse()の 10 の便利なバリエーションを見ていきます。

0.parseInt()

最も人気のあるparse()メソッドの 1 つ、正確にはparse()ではなくparseInt()から始めましょう。Java parseInt ()メソッドは、特定の文字列からプリミティブ データ型を取得するために使用されます。言い換えれば、文字列を数値に変換します。parseInt () には1 つまたは 2 つの引数を指定できます。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()メソッドがあります。period parse()の構文は次のとおりです。

public static Period parse(CharSequence text)
CharSequence は、文字列によって実装されるインターフェイスです。したがって、 parse()メソッドで文字列をテキスト要素として使用できます。確かに、Period クラスのオブジェクトを返すには、文字列が適切な形式である必要があります。この形式はPnYnMnDです。ここで、Y は「年」、M は「月」、D は「日」を表します。N は各期間の値に対応する数値です。
  • このメソッドには、テキスト値というパラメータが 1 つあります。
  • Parse() は、文字列の値がパラメータとなる Period 値を返します。
  • 例外として、文字列値がピリオドの構造を満たさない場合、period 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)
このメソッドには 2 つのパラメータがあります。
  • Position: 開始インデックスのデータ。常に ParsePosition オブジェクト タイプです。
  • the_text: メソッドが解析する文字列を定義します。これは String 型の値です。
このメソッドは位置宣言なしで使用できます。この場合、データはインデックス 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 を解析しようとすると、例外が発生します。
スレッド「メイン」java.text.ParseException での例外: 解析できない日付: 「日付は次のとおりです: 14/010/2020」 (java.base/java.text.DateFormat.parse(DateFormat.java:396)、ParseDemo2.main) (ParseDemo2.java:22)

3. LocalDate parse() メソッド

LocalDate は、年-月-日などの日付を表すために Java 8 で登場したクラスです (年間の日、曜日、週にもアクセスできます)。LocalDate は時間やタイムゾーンを表しません。 LocalDate parse()メソッドには 2 つのバリアントがあります。どちらも文字列を新しい Java 8 日付 API ( java.time.LocalDate )に変換するのに役立ちます。

parse(CharSequence テキスト、DateTimeFormatter、フォーマッタ)

このメソッドは、特定のフォーマッタを使用して文字列を解析し、LocalDate のインスタンスを取得します。メソッドの構文は次のとおりです。

public static LocalTime parse(CharSequence text,
                              DateTimeFormatter formatter)
このメソッドには、解析されるテキストと開発者が適用するフォーマッタという 2 つのパラメータがあります。このメソッドは戻り値として、現地の時刻として認識される LocalTime オブジェクトを返します。テキスト値が解析できなかった場合、システムは DayTimeParseException をスローします。2 つのパラメーターを指定し て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 フォーマットされたローカル日付: 14/10/2020
1 つのパラメーターを持つLocalDate parse()メソッドの構文は次のとおりです。

public static LocalTime parse(CharSequence text)
この方法ではフォーマッタを指定する必要はありません。開発者が括弧内に文字列値を入力すると、システムは自動的に DateTimeFormatter.ISO_LOCAL_DATE を使用します。このメソッドには 1 つのパラメータ (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 は、年-月-日-時-分-秒として表示される日付と時間を表すオブジェクトです。また、開発者は他の日付と時刻のフィールド (年間の日、曜日、および年間の週) を使用することもできます。このクラスは不変です。時間はナノ秒の精度で表されます。たとえば、値「2020 年 11 月 17 日 13:30.30.123456789」を LocalDateTime に保存できます。このクラスはタイムゾーンを表すものではありません。これは、標準的な日付表現に現地時間を加えたものです。 LocalDateTime parse()メソッドは 2 つのバリアントで表されます。
  • 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 形式の 1 つまたは一連のオブジェクトを取得します。解析中にエラーが発生した場合、または解析が不可能な場合、まずメソッドは DateTimeParseException を返します。また、2 つの変数を含むparse()メソッドもあります。

public static ZonedDateTime parse(CharSequence text, DateFormatter formatter)
このメソッドは、特定のフォーマッタを使用してテキスト値から ZonedDateTime のインスタンスを取得します。パラメータが 1 つあるメソッドであるフォーマッタ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() メソッド

LocalTimeクラスは時間を表し、多くの場合、時、分、秒で表示されます。このクラスは、ZonedDateTime のように不変でもあります。Time はナノ秒の精度で表されます。たとえば、値「13:45.30.123456789」は LocalTime に保存できます。LocalTime parse()メソッドは 2 つあり、パラメータが 1 つと 2 つあります。両方を見てみましょう:

public static LocalTime parse(CharSequence text)
LocalTime parse() は、解析する文字列というパラメータを 1 つだけ指定して 使用できます。この場合、フォーマッタ DateTimeFormatter.ISO_LOCAL_TIME がデフォルトで使用されます。

Method with two parameters has the next syntax: 
public static LocalTime parse(CharSequence text,
                              DateTimeFormatter formatter)
特定のフォーマッタを使用して、テキスト値から LocalTime のインスタンスを取得します。どちらのメソッドも LocalTime 値を hh/mm/ss 形式で返します。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 オブジェクトを返します。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