Javaの基礎Java

Javaの基礎:文字列と日付の扱いを解説(String,java.time)

Java文字列と日付解説ページのアイキャッチ画像 Javaの基礎

この記事では、Javaにおける文字列と日付の扱い方について学びます。文字列操作にはStringクラスを、日付操作にはjava.timeパッケージを使用する方法を理解できます。また、実践的なプログラム例を通じて、これらの概念を具体的に学ぶことができます。

はじめに

この記事のコードをコピペしてEclipseで出力結果を確認してみよう

文字列の扱い

Javaでは文字列を扱うためのStringクラスが用意されています。Stringクラスは不変(immutable)オブジェクトで、一度生成されると内容を変更できません。

主な文字列操作メソッド:

  • length(): 文字列の長さを取得
  • charAt(int index): 指定位置の文字を取得
  • substring(int beginIndex, int endIndex): 部分文字列を取得
  • toLowerCase()/toUpperCase(): 小文字/大文字変換
  • trim(): 前後の空白を除去
  • replace(char oldChar, char newChar): 文字置換

日付の扱い

Java 8以降では、日付と時刻を扱うための新しいAPIとしてjava.time APIが導入されました。このAPIは従来のDateやCalendarクラスに比べて、より直感的で使いやすい設計になっています。

主な日付/時刻クラス

LocalDate: 日付のみを表現
LocalTime: 時刻のみを表現
LocalDateTime: 日付と時刻を表現
ZonedDateTime: タイムゾーン付きの日付と時刻を表現
Instant: エポック秒からの経過時間を表現

日付/時刻の操作

java.time APIのクラスはイミュータブル(不変)で、スレッドセーフです[1]. 日付/時刻の操作は元のオブジェクトを変更せず、新しいオブジェクトを返します。

生成: now()やof()メソッドを使用
取得: get〇〇()メソッドで各フィールドを取得
設定: with〇〇()メソッドで特定のフィールドを設定
加算/減算: plus〇〇()やminus〇〇()メソッドで日付/時刻を加減算
比較: is〇〇()メソッドで日付/時刻の前後関係を比較

フォーマット/解析

DateTimeFormatterクラスを使用して、日付/時刻オブジェクトと文字列の相互変換が可能です。

java.time APIは、従来のAPIと比べて直感的で使いやすく、より多くの機能を提供します。タイムゾーンの扱いも改善され、日付/時刻計算の正確性が向上しています。

プログラム例1: 文字列操作(Stringクラス)

StringExample.java

Java
public class StringExample {
    public static void main(String[] args) {
        // 文字列の生成
        String str = "Hello, Java!";

        // 文字列の長さを取得
        System.out.println("文字列の長さ: " + str.length());

        // 部分文字列の取得
        String sub = str.substring(0, 5);
        System.out.println("部分文字列: " + sub);

        // 文字列の置換
        String replaced = str.replace('a', 'A');
        System.out.println("置換後: " + replaced);

        // 文字列の結合
        String name = "Alice";
        String message = str + " My name is " + name + ".";
        System.out.println("結合された文字列: " + message);

        // 文字列の比較
        String str1 = "Java";
        String str2 = "java";
        System.out.println("str1とstr2は等しい: " + str1.equals(str2));
        System.out.println("大文字小文字を無視して等しい: " + str1.equalsIgnoreCase(str2));
    }
}

出力結果:

文字列の長さ: 12
部分文字列: Hello
置換後: Hello, JAvA!
結合された文字列: Hello, Java! My name is Alice.
str1とstr2は等しい: false
大文字小文字を無視して等しい: true

StringExample.javaの解説

  • クラス定義
Java
public class StringExample {
    public static void main(String[] args) {
        // メインメソッドの内容
    }
}

これは StringExample という名前のクラスを定義しています。public static void main(String[] args) はJavaプログラムのエントリーポイントとなるメインメソッドです。

  • 文字列の生成
Java
String str = "Hello, Java!";

ここでは、文字列リテラルを使用して str という変数に文字列を代入しています。

  • 文字列の長さ
Java
System.out.println("文字列の長さ: " + str.length());

length() メソッドを使用して文字列の長さ(文字数)を取得しています。

  • 部分文字列の取得
Java
String sub = str.substring(0, 5);
System.out.println("部分文字列: " + sub);

substring() メソッドを使用して、文字列の一部(インデックス0から4まで)を抽出しています。

  • 文字列の置換
Java
String replaced = str.replace('a', 'A');
System.out.println("置換後: " + replaced);

replace() メソッドを使用して、文字列内の特定の文字(この場合は ‘a’)を別の文字(’A’)に置換しています。

  • 文字列の結合
Java
String name = "Alice";
String message = str + " My name is " + name + ".";
System.out.println("結合された文字列: " + message);

+ 演算子を使用して複数の文字列を結合しています。

  • 文字列の比較
Java
String str1 = "Java";
String str2 = "java";
System.out.println("str1とstr2は等しい: " + str1.equals(str2));
System.out.println("大文字小文字を無視して等しい: " + str1.equalsIgnoreCase(str2));
  • equals() メソッドを使用して、2つの文字列が完全に一致するかを比較しています。
  • equalsIgnoreCase() メソッドを使用して、大文字小文字を区別せずに2つの文字列を比較しています。

このプログラムは、Javaの文字列操作の基本的な方法を示しています。文字列の生成、長さの取得、部分文字列の抽出、置換、結合、比較など、よく使用される操作が含まれています。

プログラム例2: 日付操作(java.timeパッケージ)

Java 8以降で導入されたjava.timeパッケージを使用して、日付操作の基本的な例を示します。

Java
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

public class DateManipulationExample {
    public static void main(String[] args) {
        // 現在の日付を取得
        LocalDate today = LocalDate.now();
        System.out.println("今日の日付: " + today);

        // 特定の日付を作成 (例: 2024年1月1日)
        LocalDate newYear2024 = LocalDate.of(2024, 1, 1);
        System.out.println("2024年の元日: " + newYear2024);

        // 日付のフォーマット
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
        String formattedDate = today.format(formatter);
        System.out.println("フォーマットされた今日の日付: " + formattedDate);

        // 日付の加算
        LocalDate nextWeek = today.plusWeeks(1);
        System.out.println("1週間後の日付: " + nextWeek);

        // 日付の減算
        LocalDate lastMonth = today.minusMonths(1);
        System.out.println("1ヶ月前の日付: " + lastMonth);

        // 二つの日付の間の日数を計算
        long daysBetween = ChronoUnit.DAYS.between(today, newYear2024);
        System.out.println("今日から2024年元日までの日数: " + daysBetween + "日");

        // 日付の比較
        boolean isAfter = today.isAfter(newYear2024);
        System.out.println("今日は2024年元日より後ですか? " + isAfter);
    }
}

出力結果:

今日の日付: 2024-10-12
2024年の元日: 2024-01-01
フォーマットされた今日の日付: 2024年10月12日
1週間後の日付: 2024-10-19
1ヶ月前の日付: 2024-09-12
今日から2024年元日までの日数: -285日
今日は2024年元日より後ですか? true

DateManipulationExample.javaの解説

  • インポート文
Java
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

これらのインポート文は、日付操作に必要なクラスをJavaの標準ライブラリから読み込みます。LocalDateは日付を、DateTimeFormatterは日付のフォーマット、ChronoUnitは時間単位の計算に使用されます。

  • 現在の日付の取得
Java
LocalDate today = LocalDate.now();
System.out.println("今日の日付: " + today);

LocalDate.now() メソッドを使用して現在の日付を取得します。これはシステムの現在の日付を返します。

  • 特定の日付の作成
Java
LocalDate newYear2024 = LocalDate.of(2024, 1, 1);
System.out.println("2024年の元日: " + newYear2024);

LocalDate.of() メソッドを使用して、特定の年月日の日付オブジェクトを作成します。

  • 日付のフォーマット
Java
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
String formattedDate = today.format(formatter);
System.out.println("フォーマットされた今日の日付: " + formattedDate);

DateTimeFormatterを使用して日付のフォーマットを指定し、format() メソッドで日付を指定したフォーマットの文字列に変換します。

  • 日付の加算と減算
Java
LocalDate nextWeek = today.plusWeeks(1);
System.out.println("1週間後の日付: " + nextWeek);

LocalDate lastMonth = today.minusMonths(1);
System.out.println("1ヶ月前の日付: " + lastMonth);

plusWeeks()minusMonths() メソッドを使用して、日付の加算と減算を行います。これらのメソッドは新しい LocalDate オブジェクトを返します。

  • 日付間の差分計算
Java
long daysBetween = ChronoUnit.DAYS.between(today, newYear2024);
System.out.println("今日から2024年元日までの日数: " + daysBetween + "日");

ChronoUnit.DAYS.between() メソッドを使用して、二つの日付間の日数を計算します。

  • 日付の比較
Java
boolean isAfter = today.isAfter(newYear2024);
System.out.println("今日は2024年元日より後ですか? " + isAfter);

isAfter() メソッドを使用して、ある日付が別の日付より後かどうかを比較します。

このコードは、Java 8以降で導入された新しい日付時刻APIを使用しており、日付操作を簡潔かつ効果的に行うことができます。これらのメソッドはイミュータブル(不変)なオブジェクトを返すため、元のオブジェクトは変更されず、スレッドセーフな操作が可能です。

このプログラムは日付操作の基本的な使い方を示していますが、java.timeパッケージにはさらに多くの機能があります。必要に応じて公式ドキュメントを参照することをお勧めします。

まとめ

  • Stringクラスを使用して文字列を操作
  • java.timeパッケージを使用して日付と時刻を扱う方法
  • 主な日付/時刻クラス(LocalDate, LocalTime, LocalDateTime)の使い方
  • 日付/時刻の操作、フォーマット、解析の基本

Javaでの文字列と日付の扱いは、多くのアプリケーション開発で重要な役割を果たします。この記事で学んだ技術を活用することで、より効率的で堅牢なプログラムを作成することができます。文字列操作と日付操作の基本を押さえることで、さまざまなプログラミング課題に対応する力が身につきます。

未経験でもWEBスキルを取得したい方
  • Javaコース
    Javaプログラミングを基礎から応用まで、体系的に学べる実践的なカリキュラムが特徴です。「マインクラフト」を通じてJavaの基本文法とフレームワークの概念を学びます。また、実際のプロジェクト開発を通じて、データベース連携やWebアプリケーション開発のスキルを身につけることができます。

コメント

タイトルとURLをコピーしました