2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

スッキリわかるJava入門 第3版を読んでみて- part15 - 文字列と日付の扱い

Last updated at Posted at 2023-08-25

はじめに

こんにちは(・ω・)ノ
今回は文字列と日付の扱いについて学びました!

第15章 文字列と日付の扱い

1.文字列処理とは

文字列の情報を処理する、さまざまな方法の総称... 文字列処理(テキスト処理)
文字列操作の多くはStringクラスに備わっているメソッドを利用する

2.基本的な文字列操作

文字列を調査する
スクリーンショット 2023-08-24 10.25.10.png

文字列を検索する
スクリーンショット 2023-08-24 10.37.16.png
※先頭位置を0として指定することに注意
文字列を切り出す
スクリーンショット 2023-08-24 10.41.02.png
※先頭位置を0として指定することに注意
文字列を変換する
スクリーンショット 2023-08-24 11.01.57.png
※全角スペースは除去されない

3.文字列の連結

文字列の連結方法
 +演算子を用いる方法

:new: StringBuilderクラスを用いた連結
 性能が+演算子を使う4000倍

用いる2つの手順
1.appendメソッドを呼んでバッファに文字列を追加していく(必要に応じた回数を呼び出す)
2.最後に1回だけtoString()を呼び、完成した連結済みの文字列を取り出す

:sparkles:Stringインスタンスの不変性
Stringインスタンスが保持する文字列情報は、
インスタンス化した際に初期化され、以後二度と変化することはない

Stringクラスに限らず、「インスタンス化の後に内容が絶対に変化しない」ように設計されたクラス
... 不変(immutable)

StringBuilderは可変のクラスとして設計されている。
そのため、高速に処理ができる。

4.正規表現の活用

引数で与える文字列...文字列パターン
「文字列の形式的な条件」を文法に従って記述したもの...正規表現
文字列がパターンに従った形式を満たしているかを照合する処理...パターンマッチング

正規表現の基本文法

1.通常の文字:その文字でなければならない
2.ピリオド:任意の1文字であればよい
3.アスタリスク:直前の文字の0回以上の繰り返し
4.波カッコ:指定回数の繰り返し
5.角カッコ:いずれかの文字
6.角カッコ内のハイフン
7.ハットとダラー:先頭と末尾

正規表現を用いたほかの処理
1つの文字列を複数に分割できる
splitメソッド:文字列の分割

文字列中でパターンに一致した箇所を別の文字列に置換できる
replaceAllメソッド:文字列の置換

5.文字列の書式整形

書式指定文字列型...組み立てる文字列のひな形を指定する
プレースホルダ...第2引数以降で指定した具体的な値が順に流し込まれる場所

:pencil2: 書式を指定して画面に表示する
System.out.println(書式文字列,パラメータ...);

6.日付と時刻を扱う

日時情報を扱う2つの基本形式
形式1:long型の数値
 基準日時(エポック)から経過したミリ秒数で日時情報を表現する方法
形式2:Date型のインスタンス
 Javaで日時の情報を扱う場合に最も利用される形式

:pencil2: 現在日時をもつDateインスタンスの生成
Date d = new Date();

:pencil2: 指定時点の日時を持つDateインスタンスの生成
Date d = new Date(long 値);

人間が扱いやすい2つの形式
形式3:人間が指定しやすい「6つのint」形式
形式4:人間が読みやすいString型のインスタンス

上記の4つの形式を自由に利用できるためには
1・Date型と6つのint値の相互変換
2・Date型とString型の相互変換

1・Date型と6つのint値の相互変換の解決方法
:pencil2: 「6つのint値」からDateインスタンスを生成する

Calendar c = Calendar.getInstance();
c.set(年、月、日、時、分、秒);
または
c.set(Calendar.~,値);
Date d = c.getTime();

:pencil2:Dateインスタンスから「6つのint値」を生成する

Calendar c = Calendar.getInstance();
c.setTime(d);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
int hour = c.get(Calendar.HOUR);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);

2・Date型とString型の相互変換の解決
:pencil2:StringからDateインスタンスを生成する

SimpleDateFormat f = new SimpleDateFormat(書式文字列);
Date d = f.parse(文字列);

:pencil2:DateインスタンスからStringを生成する

SimpleDateFormat f = new SimpleDateFormat(書式文字列);
String s = f.format(d);

:sparkles: DateやCalendarが抱えている代表的な問題点
1.使い方が紛らわしいAPIが存在する
2.並列処理で用いるとインスタンスの内容が壊れることがある

:sparkles: DateやCalendarの機能的な限界
・最小でも「ミリ秒」単位でしか時間を扱えない
・私たちが日常利用する「曖昧な日時」を表せない
・私たちが日常利用する「時間の幅」を表せない

7.Time API

 Java.timeパッケージの代表的なクラス
スクリーンショット 2023-08-25 10.27.58.png

:sparkles: 曖昧な日時の必要性
人は普段タイムゾーン情報が欠落した「曖昧な日時」を使って生活している。
しかし、そんな日時情報を正しくJavaの世界で再現する手段がなかった。

まとめ

Stringクラスに備わっているメソッドを使って、さまざまな文字列操作を行うことができる。
正規表現を使うことでさまざまなパターンマッチングを表現できる。
日時情報は基本的にjava.util.Date型で扱う
さらに厳格な時刻の格納にはInstantクラスやZonedDateTimeクラス、曖昧な日時の表現にはLocalDateやYearMonthなどの複合クラスが、時間の間隔にはDurationクラスPeriodクラスを格納するなどそれぞれに対応するクラスを扱う

日付と時刻のところであまり理解ができていないと感じました。
それぞれのクラスでの特徴の違いを理解することで覚えていきたいと感じました。
あとはCalendarクラスの部分があまり...って感じだったかなと思います。

今回もありがとうございました!
ではまた〜 *˙︶˙*)ノ"

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?