本日学習したこと
- 文字列の処理に使用するメソッド
- 正規表現
文字列処理に使用できるメソッドたち
java
equals(); #内容が等しいかどうか
equalsIgnoreCase(); #大小の文字を区別しない
length(); #文字数
isEmpty(); #から文字かどうか
contains(); #一部に含むかどうか
startsWith(); #最初にキーワードがあるか
endsWith(); #最後にキーワードがあるか
indexOf(); #前から何文字目にキーワードが登場するか
lastIndexOf(); #後ろから検索し、前から何文字目にキーワードが登場するか
charAt(); #1文字の切り出し
substring(); #複数文字の切り出し
toLowerCase(); #大文字を小文字に変換
toUpperCase(); #小文字を大文字に変換
trim(); #前後の空白を除去
- 文字の連結
今までは文字列は「+演算子」で連結すると学習したが、「+演算子」は連結させる際に古いインスタンスを捨て、新しいインスタンスをnewにより生成、格納する。
つまり、たくさんの連結をするということは、たくさんの新しいインスタンスを生成するということなのでJVMに大きな負荷がかかる。
そのため、StringBuilderを使用して処理を高速にできる。
StringBuilerはnewを使うことなくバッファを拡大していく。
java
#使い方
StringBuilder sb = new StringBuilder(); #StringBuilderクラスのいんすたんすを変数sbに代入する。
sb.append("こん").append("にち").append("は"); #StringBuilderクラスの変数sbにappendメソッドで追加している。
String s = sb.toString(); #連結した文字列を取り出し、変数sに代入している。
System.out.println(s); #実行結果 => "こんにちは"
正規表現
matches()メソッドを使用する。
java
❶通常の文字: 完全一致でなければならない
String s = "Java";
s.matches("Java"); => true #完全一致している。
s.matches("JavaScript"); => false #Scriptが一致していない。
s.matches("java"); => false #最初の文字(J)が小文字になっている。
❷ピリオド: 任意の一文字であればいい
"Java".matches("J.va"); => true #ピリオド(.)は任意の文字なのでどの文字に置き換えられてもいい。
❸アスタリスク: 直前の文字の0回以上の繰り返し
"Jaaaaaaaaava".matches("Ja*va"); => true #直前の文字、つまり「a」が何回繰り返してもいいということ。
"あいうxx019".matches(".*"); => true #直前の文字はピリオドで任意の文字でいいことから全ての文字列を許すという指示になる。
❹波括弧: 指定回数の繰り返し
"HELLLO".matches("HEL{3}O"); => true #直前の文字が3回繰り返すという意味なのでtrue。
#繰り返し回数の指定方法
#パターン記述 : 意味
#{n} : 直前の文字のn回の繰り返し
#{n,} : 直前の文字のn回以上の繰り返し
#{n,m} : 直前の文字のn回以上、m回以下の繰り返し
#? : 直前の文字の0回または1回の繰り返し
#+ : 直前の文字の1回以上の繰り返し
❺角カッコ: いずれかの文字
#角カッコ記号[]で囲まれた部分がある場合、角カッコの中のどれか一文字に当てはまることを要求する意味となる。
"Java".matches("Jav[abc]"); => true #Javから始まり、4文字目がabcどれかに当てはまればOK。
❻角カッコ内のハイフン: 指定範囲のいずれかの文字
"java".matches("[a-z]{4}"); => true #a~zの範囲を指定し、それが4回繰り返される文字列と比較する。
#定義済みの文字クラスの例
#パターン記述 : 意味
#¥d : いずれかの数字 ([0-9]と同じ)
#¥w : 英字・数字・アンダーバー([a-zA-Z_0-9]と同じ)
#¥s : 空白文字 (スペース、タブ文字、改行文字など)
❼ハット(^)とダラー($): 先頭と末尾
#ハットは先頭を、ダラーは末尾を表す。
"Java".matches(^J.*a$); => true #先頭がJから始まり、末尾がaの任意の長さの文字列という意味。
- split()メソッド: 文字列の分割
java
#一つの文字列をカンマ(,)か、コロン(:)で分割できる。
String s = "abc,def:ghi";
String[] words = s.split("[,:]");
# []内に(,)と(:)を指定することで、(,)と(:)の部分をsplitメソッドで区切るという意味になる。
- replaceAll()メソッド: 文字列の置換
java
#文字列中でパターンに一致した箇所を別の文字列に置換できる。
String s = "abc,def:ghi";
String w = s.replaceAll("[beh]","X"); #[]内に指定した文字があれば、Xに置換される。
System.out.println(w); #実行結果 => aXc,dXf:gXi
- format()メソッド: 整形した文字列を組み立てる
java
String.format("%d月%d日%sした。",3,26,"javaを学習");
# 実行結果=> 3月26日javaを学習した。
# 第一引数に指定するのは、組み立てる文字列の雛形(書式指定文字列という)。
# %記号の部分はプレースホルダーと呼ばれ、第2引数以降で指定した具体的な値が順に流し込まれる場所となる。
#プレースホルダーの書式
#%修飾,桁,型 (わかりやすいようにカンマ(,)で区切っているが実際は区切らなくていい)
#修飾 (カンマ(,) => 3桁ごとにカンマを入れる; 0 => 空き領域を0で埋める; - => 左寄せ(数字); + => 符号を強制表示)
#桁 (表示桁数を指定する。n.m形式で指定した場合、全体n桁、小数点以下m桁での表示となる)
#型 (d => 整数; s => 文字列; f => 少数; b => 真偽値)