Javaの文字列操作

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から始まっています。

f:id:astrophysik928:20181130001232p:plain

 


//文字列の変換

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がよいでしょう。

 

//正規表現の活用

String s9 = "Java";

//完全に一致した文字列があるか
s9.matches("Java");
true 返すのはboolean型

s9.matches("JavaJava");
false 返すのはboolean型

s9.matches("JAVA");
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型)