Javaでの文字列操作についてまとめておきます。
「文字列の調査」
//文字列の調査
String s1 = "FIRE";
String s2 = "fire";
//内容が等しいか判断1。大文字、小文字を区別する。
s1.equals(s2)
→false 返すのはboolean型
//大文字、小文字区別せず内容の判断
s1.equalsIgnoreCase(s2);
→true 返すのはboolean型
//空文字かどうか調べる
s1.isEmpty()
→false 返すのはboolean型
//文字列の長さを返す。全角文字も半角文字も1文字としてカウント
s1.length()
→ 4 返すのはint型
「文字列の検索」
//文字列の検索
String s3 = "fire and water";
//文字列fireを含んでいるが判断
s3.contains(fire);
→true 返すのはboolean型
//文字列fireで始まるか判断
s3.startsWith(fire);
→true 返すのはboolean型
//文字列fireで終わるか判断
s3.endsWith(fire);
→false 返すのはboolean型
//文字列s3でandが始めに出る位置
s3.indexOf(and);
→ 5 返すのはint型
文字列で注意する必要があるのは、インデックス番号です。先頭は0になります。そのため、「and」も6ではなく、5から始まっています。
//文字列の変換
String s5 = "PLAIN";
String s6 = "water";
String s7 = "GozilA";
//大文字を小文字へ
s5.toLowerCase()
→plain 返すのはString型
//小文字を大文字へ
s6.toUpperCase()
→WATER 返すのはString型
//小文字と大文字が混在している場合
s7.toUpperCase()
→GOZILA 返すのはString型
s7.toLowerCase()
→gozila 返すのはString型
//単語の前後の空白の削除
String s8 = " Good morning ";
s8.trim()
→"Good morning"//中央の空白は取り除かない。最初と最後のみ。
大文字、小文字が混在している文字列をtoUpperCase()かtoLowerCase()で処理する場合、toUpperCase()なら全てが大文字になり、toLowerCase()なら全てが小文字になります。
//文字列の切り出し
String s4 = "fire programming";
s4.charAt(0);//インデックス番号指定。「0」が先頭。
→ f 返すのはchar型
s4.charAt(1);
→ i 返すのはchar型
//指定したインデックス番号からそれ以降を切り出し。
s4.substring(3);
→ e programming 返すのはString型
//指定したインデックス番号から、指定したインデックス番号の手前までを切り出し。
s4.substring(3,8);
→ e pro 返すのはString型
なお、charAtについてですが、charAtで切り出した一文字を文字列として使用したい時があります。しかし、charAtが返すのはchar型です。そこで、String型のダブルクォーテーション「""」を切り出したchar型の一文字とくっつけます。すると、String型に変わり、使いやすくなります。
fire.charAt(0) + "" → f(String型)
//文字列の連結
StringBuilder sb = new StringBuilder();
sb.append("Java").append("Hello").append("World");
sb.toString();
→ JavaHelloWorld 返すのはString型
文字列の同士の連結では「+」がありますが、StringBuilderのappendで連結する方が約4000倍速くなります。何万文字も連結する処理を作る時は、appendがよいでしょう。
//完全に一致した文字列があるか
→ true 返すのはboolean型
s9.matches("JavaJava");
→ false 返すのはboolean型
→ false 返すのはboolean型
//「.」には任意の文字列があればよい。bでもcでもよい。
//1文字目はJ、2文字目は何でもよい、3文字目も何でもよい、4文字目はaであること。
s9.matches("J..a");
→ true 返すのはboolean型
//「Ja」ではじまる任意の文字で始まるかの判定
s9.matches("Ja.*");
→ true 返すのはboolean型
//「va」で終わる任意の文字で終わるかの判定
s9.matches("*.va");
→ true 返すのはboolean型
//指定した範囲のいずれかを判断
//1文字目は大文字のアルファベット、2文字目以降3文字は小文字のアルファベット
s9.matches("[A-Z][a-z]{3}");
→ true 返すのはboolean型
//1文字目は大文字、2,3文字目は小文字、4,5文字目は数字であるか判断
"Abn12".matches("[A-Z][a-z]{2}[0-9]{2}");
→ true 返すのはboolean型
"AbnXX".matches("[A-Z][a-z]{2}[0-9]{2}");
→ false 返すのはboolean型
matchesメソッドで 様々な文字列の判定ができます。
//valueOfは引数の値(型は何でもよい)をString型の文字列に。
int sh1 = 900;
String.valueOf(sh1);
→ 900 返すのはString型
char sh2 = 'K'; //char型はシングルクワォーテーションで囲む。
String strsh2 = String.valueOf(sh2);
→ K 返すのはString型
valueOfはint型やchar型などの値をString型に変換します。
String.valueOf(様々な型の引数) => String型を返す
なお、char型を用いる時はシングルコーテーションで囲むようにしなければなりません。ダブルクォーテーションではエラーになります。ちなみにchar型はダブルクォーテーション「"""」とくっつけても、String型になります。
'と'(char型) + "" → と(String型)