oracleJavaSilverの勉強日記(Java APIの主要なクラスの操作)
String
複数の文字を集めたものを「文字列」と呼ぶ。Stringクラスは、ほかのクラスと同様にインスタンスを生成して利用する。Stringクラスのインスタンスを生成するにはいくつかの方法があるが、代表的なの次の二通り。
・newを使ってインスタンス化する
・ダブルクォーテーション「"」で括った文字列リテラルを記述する
Stringは「immutable(不変)オブジェクト」。
オブジェクト
オブジェクトは、何らかのデータを内部に持っている。このとき、一度セットしたフィールドの値を、あとから変更できるオブジェクトと変更できないオブジェクトがある。
変更できるオブジェクトのことを「mutable(可変)オブジェクト」、変更できるオブジェクトのことを「immutable(不変)オブジェクト」と呼ぶ。
Stringクラスの基本メソッド
replaceAllメソッド
置換した結果の文字列を持った新しいStringインスタンスを作り、そのインスタンスへの参照を戻すもの
charAtメソッド
インスタンスが保治している文字列から、引数で指定された位置にある1文字だけを抜き出して戻す。
indexOfメソッド
引数で指定された文字が文字列のどの位置に存在するかを調べるためのメソッド。もし、存在しなければ、-1が戻される。
substringメソッド
文字列から任意の文字列を抽出するメソッド。
trimメソッド
文字列の前後にある空白を除去するためのメソッド。文字列内の空白を除去するわけではない。trimメソッドが除去する空白は色々あるが、次の3つを覚えておく。
・スペース
・¥tまたはタブ文字
・¥nまたは¥rまたは改行
replaceメソッド
文字列を置き換えるためのメソッド。文字列の置き換えは先頭から始まり、文字列の最後まで行われる。replaceメソッドが引数は、char型かCharSequence型のうちのどちらかしか受け取らない。
lengthメソッド
文字数を戻すメソッド。半角英数字も全角文字も同じように文字列を戻す。半角文字・全角文字のいずれかも1文字として扱う。
startsWithメソッド
文字列が引数で指定された文字で始めるかどうかを調べるためのメソッド。調べた結果は真偽値を戻す。
endWithメソッド
引数の文字で終わっているかどうかを調べるためのメソッド。調べた結果は真偽値で戻す。
メソッドチェイン
メソッドの戻り値に対してさらにメソッドを呼び出すように記述する方法。
splitメソッド
文字列を分割するためのメソッド。分割する箇所は、正規表現で指定する。
concatメソッド
オブジェクト内部の文字列と引数として渡された文字列を連結した、新しい文字列を戻すメソッド。+演算子による文字列連結と同じ効果ととらえていい。
+演算子
+演算子は、数値を加算するための演算子だが、文字列に対して使えば、左右のオペランドの文字列は連結される。数値と文字列の場合は、数値が文字列に置き換わってから文字列として連結される。また、数値加算と文字列連結が混在する式は、左から順に実行する。
※参照を持たないことを示すnullは”null”という文字列に置き換えられ、文字列として連結する。
StringBuilderクラス
内部にバッファを持った文字列を扱うためのクラス。
StringBuilderは保持している文字列+余分のバッファを持っている。余分のバッファはデフォルトで16文字分のバッファを持っている。
※文字列を引数に渡すコンストラクタを使った場合、StringBuilderのインスタンスは、「文字列の長さ+16文字分」のバッファを持っている。
※コンストラクタでバッファの値を指定することもできる。その時は、16文字は計算しない。
StringBuilderのメソッド
appendメソッド
文字列に新しい文字列を追加するメソッド。追加された文字列は、既存の文字列の後ろに追加される。appendメソッドには様々な引数を受け取ることができる。
・プリミティブ型(整数、浮動小数点数、真偽、文字の8種類すべて)
・String
・char配列
・オブジェクト
insertメソッド
文字列を任意の場所に挿入するメソッド。このメソッドは2つの引数を取り、第1引数は挿入する場所を、第2引数は挿入する文字列を受け取る。
deleteメソッド
引数で指定した範囲にある文字列を削除するためのメソッド。
deleteCharAtメソッド
引数で指定した位置にある文字を削除するメソッド。
reverseメソッド
文字列を反転するメソッド。
replaceメソッド
第1引数と第2引数で指定した範囲の文字列を、第3引数の文字列に置き換えるメソッド。
subSequenceメソッド・substringメソッド
両方とも任意の範囲の文字列を抽出する。
ラムダ式
関数型インターフェース
ラムダ式を使う前に「実装が必要なメソッドを1つだけもついインターフェース」を生成する必要がある。それが関数型インターフェース。
ラムダ式の構文
関数型インターフェースの型 変数名= (引数) ->{処理};
引数の宣言では()を省略することができる。もし、引数のカッコを省略するのであれば、引数の型を記述してはいけない。また、引数が2つの場合は引数の()を省略することはできない。
ラムダ式ではインターフェースの中の変数名と同じにする必要はない。だた、ラムダ式で使う変数は全部同じにしなければいけない。また、実行したい処理が1つしかないのであれば、{}を省略することもできる。
戻り値が存在した場合
・{}省略→returnキーワードを記述できない
・{}あり→returnキーワードを記述しなければコンパイルエラー
※メソッド内で宣言したローカル変数と同じ名前の変数をラムダ式の引数名として使うことはできない。
※ラムダ式外で宣言されたローカル変数にラムダ式内からアクセスするには、実質的にfinalな変数(定数)でなければいけない。
java.util.funtionパッケージ
Predicate
何らかの処理の結果としてboolean型の値を返すための関数型インターフェース。
※他にも3つほどあるが、SilverではPredicateインターフェースしかでない。
日付と時刻に関するAPI
LocalDate
・immutable(不変)オブジェクト
・月の始まりが1から始まる。
・日付を操作するための便利なメソッドがある。
ofメソッド
日付を指定してインスタンスを生成したい場合。
nowメソッド
現在の日付でインスタンスを生成したい場合。
parseメソッド
文字列の日付をLocalDateクラスに変換する場合。
until
日付の差を計算するメソッド。
LocalTime
・immutable(不変オブジェクト)
・24時間で時間を扱い、午前/午後の区別をしない。
plusHoursメソッド
時間を追加するメソッド。
※LocalDateで書いた3つのメソッドも使える。
Duration
時刻の差を扱うためのクラス。
between
2つの日時の差を計算し、その結果をDurationのインスタンスとして戻すメソッド。
toHours
時間の差を取り出すメソッド。
LocalDateTime
LocalDateとLocalTimeの両方の特徴を持ち、日付と時刻の両方を扱えるクラス。
Period
日付の差を扱うクラス。
plusDays
日付を追加するメソッド
minus
日付を変更するメソッド。
DateTimeFormatter
フォーマッター
BASIC_ISO_DATE
日付の区切り記号がない年月日を表す書式
例:20220831
ISO_DATE_TIME
区切り記号や時刻情報を付けた書式
例:2022-08-31T00:00:00
ArrayList
このクラスは「動的配列」と呼ばれ、配列のように使える。いくつかの特徴がある。
・オブジェクトであればどのような型でも扱える
・必要に応じて要素数を自動的に増やす
・追加した順に並ぶ
・nullも値として追加できる
・重複した値を追加できる
・スレッドセーフではない。
遅くても安全に並行処理ができるクラスが「スレッドセーフなクラス」
安全に並行処理はできないけど早い単一処理専用のクラスが「スレッドセーフではないクラス」
addメソッド
値を追加するメソッド
setメソッド
値を置き換えるメソッド
removeメソッド
リストから要素を削除するメソッド。削除する対象の要素が複数ある場合は、equalsメソッドがtrueを戻す(同値)最初の1つを削除する。
※値を削除した場合、後ろの要素が繰り上がる。
getメソッド
値を取り出すメソッド
removeIfメソッド
引数で渡されたラムダ式がtrueを戻せば、コレクション内の要素を削除するメソッド。
※コレクションはmutable。対象となるコレクションから要素を直接削除する。