今回解説していく内容は以下です!
本記事の内容
・正規表現
・関連記事
Java 文字列(String)の操作|調査、検索、切り出し、変換、分割、整形
紹介するメソッドは全19メソッドです。
分類 | 操作 | メソッド名 |
調査 | 内容が等しいかを調べる | equals |
ケース(大文字、小文字)を区別せず等しいかを調べる | equalslgnoreCase | |
文字列の長さを調べる | length | |
空文字かを調べる | isEmpty | |
検索 | ある文字列を一部に含むか調べる | contains |
ある文字列で始まるかを調べる | startsWith | |
ある文字列で終わるかを調べる | endsWith | |
最初の登場位置を調べる | indexOf | |
最後の登場位置を調べる | lastIndexOf | |
正規表現を用いて照合する | matches | |
切り出し | 指定位置の1文字を切り出す | charAt |
指定位置から文字列を切り出す | substring | |
変換 | 大文字を小文字に変換する | toLowerCase |
小文字を大文字に変換する | toUpperCase | |
前後の空白を除去する | trim | |
文字列を置換する | replace | |
正規表現を用いて置換する | replaceAll | |
分割 | 正規表現を用いて分割する | split |
整形 | 書式指定文字列を使い整形する | format |
では、実際の使い方についてみていきましょう!
調査
equals
操作:内容が等しいかを調べる(対象の文字列.equals(検索対象))
サンプルコード:
public class Main { public static void main(String[] args) { String st1 = "Java"; String st2 = "JavaScript"; if(st1.equals(st2)){ System.out.println(st1+"と"+st2+"は一緒です。"); }else{ System.out.println(st1+"と"+st2+"は違います。"); } } }
実行結果:
JavaとJavaScriptは違います。
説明:
equlasメソッドは、引数に比較先となる文字列を指定することで、呼び出し元との文字列の値が一緒かどうかを比較します。
st1.equals(st2)
== の演算子で比較することも可能ですが、Stringの比較には必ずequalsを使うようにしましょう。
サンプルコード:
public class Main { public static void main(String[] args) { String st1 = "Java"; String st2 = new String("Java"); if(st1.equals(st2)){ System.out.println(st1+"と"+st2+"は一緒です。"); }else{ System.out.println(st1+"と"+st2+"は違います。"); } } }
実行結果:
JavaとJavaは違います。
サンプルコード:
public class Main { public static void main(String[] args) { String st1 = "Java"; String st2 = "Java"; if(st1.equals(st2)){ System.out.println(st1+"と"+st2+"は一緒です。"); }else{ System.out.println(st1+"と"+st2+"は違います。"); } } }
実行結果:
JavaとJavaは一緒です。
equalslgnoreCase
操作:ケース(大文字、小文字)を区別せず等しいかを調べる(対象の文字列.equalsIgnoreCase(検索対象))
サンプルプログラム:
public class Main {
public static void main(String[] args) {
String st1 = "ABC";
String st2 = "abc";
if(st1.equalsIgnoreCase("abc")){
System.out.println(st1+"はabcと一緒です。" );
}
if(st1.equalsIgnoreCase(st2)){
System.out.println(st1+"は"+st2+"と一緒です。");
}
if(!st1.equals(st2)){
System.out.println(st1+"と"+st2+"は違います。");
}
}
}
実行結果:
ABCはabcと一緒です。
ABCとabcは一緒です。
ABCとabcは違います。
説明:
実行結果から、大文字、小文字を区別することなく比較できていることがわかります。equalsメソッドを使ったら完全一致なので、ABCとabcは違います。という結果が返ってきました。
length
操作:文字列の長さを調べる(対象の文字列.length())
サンプルプログラム:
public class Main {
public static void main(String[] args) {
String st1 = "ABC";
String st2 = "あいうえお";
// 全角・半角スペースが含まれた文字列
String st3 = "スペース も含む よ";
System.out.println(st1.length());
System.out.println(st2.length());
System.out.println(st3.length());
}
}
実行結果:
3
5
10
説明:
実行結果から、文字数を正確に数えられていることがわかります。
st3の結果からは全角・半角のスペース共に文字数としてカウントされていることがわかります。
isEmpty
操作:空文字か調べる(対象の文字列.isEmpty())
サンプルプログラム:
public class Main { public static void main(String[] args) { String str1 = ""; String str2 = " "; if (" ".isEmpty()) { System.out.println("空です。"); } if (str1.isEmpty()) { System.out.println("空です。"); } if (!str2.isEmpty()) { System.out.println("スペースが含まれています。"); } } }
実行結果:
空です。 スペースが含まれています。
説明:
実行結果から、値が空であればtrue、値が入ってればfalseが返ってきていることがわかります。
値に全角スペースもしくは半角スペースが入っている場合は、falseを返します。
検索
contains
操作:ある文字列を一部に含むかを調べる(対象の文字列.contains(“検索対象”))
サンプルプログラム:
public class Main { public static void main(String[] args) { String str1 = "12345"; System.out.println(str1.contains("1")); System.out.println(str1.contains("10")); // 半角スペースが含まれた文字列 String str2 = "あ い う え お"; System.out.println(str2.contains("お")); System.out.println(str2.contains(" ")); System.out.println(str2.contains(" ")); } }
実行結果:
true false true true false
説明:
引数の文字列が含まれていた場合はtrue、含まれていない場合はfalseを返します。実行結果から、全角スペース、半角スペースもしっかり判定できていることがわかります。
startsWith
操作:ある文字列で始まるかを調べる(対象の文字列.startsWith(“検索対象”))
サンプルプログラム:
public class Main { public static void main(String[] args) { String st1 = "JavaScript"; String st2 = "Java"; if(st1.startsWith("j")){ System.out.println("一致しました。"); }else{ System.out.println("一致しませんでした。"); } if(st2.startsWith("J")){ System.out.println("一致しました。"); }else{ System.out.println("一致しませんでした。"); } } }
実行結果:
一致しませんでした。 一致しました。
説明:
実行結果から、大文字、小文字も判定していることがわかります。
endsWith
操作:ある文字列で終わるかを調べる(対象の文字列.endsWith(“検索対象”))
サンプルプログラム:
public class Main { public static void main(String[] args) { String st1 = "Java Script"; String st2 = "Java"; if(st1.endsWith("a Script")){ System.out.println("一致しました。"); }else{ System.out.println("一致しませんでした。"); } if(st2.endsWith("")){ System.out.println("一致しました。"); } else { System.out.println("一致しませんでした。"); } } }
実行結果:
一致しました。 一致しませんでした。
説明:
実行結果から、大文字、小文字も判定していることがわかります。
indexOf
操作:最初の登場位置を調べる(対象の文字列.indexOf(“検索対象”))
サンプルプログラム:
public class Main { public static void main(String[] args) { // 24文字 String st1 = "Javaの勉強をしているけど、Javaは難しい!"; // 14文字 String st2 = "今日は10月4日(火)です。"; String st3 = "文字列は英語でString!"; System.out.println(st1.indexOf("Java")); System.out.println(st2.indexOf("4日")); System.out.println(st2.indexOf("ストリング")); } }
実行結果:
0 6 -1
説明:
実行結果から、指定の文字列が出現する位置を返していることがわかります。st1、”Java”は最初に出てくるので「0」を返しておりst3、”ストリング”という文字は含まれていないので「-1」を返しています。
lastIndexOf
操作:最後の登場位置を調べる(対象の文字列.lastIndexOf(“検索対象”))
サンプルプログラム:
public class Main { public static void main(String[] args) { // 24文字 String st1 = "Javaの勉強をしているけど、Javaは難しい!"; // 14文字 String st2 = "今日は10月4日(火)です。"; String st3 = "文字列は英語でString!"; System.out.println(st1.lastIndexOf("Java")); System.out.println(st2.lastIndexOf("4日")); System.out.println(st2.lastIndexOf("ストリング")); } }
実行結果:
15 6 -1
説明:
indexOfと同じサンプルコードで、IndexOfをlastIndexOfに変更してみた結果がこちらです。実行結果からst1、”Java”は最後に出現した位置を返していることがわかります。
matches
操作:正規表現を用いて照合する(対象の文字列.matches(“正規表現”))
サンプルプログラム:
public class Main { public static void main(String[] args) { String st1 = "kyouha1004kadesu"; String st2 = "abc defg"; String st3 = "abc.defg"; String st4 = "abc123"; System.out.println(st1.matches("[a-z0-9]+")); System.out.println(st2.matches("[a-z]+")); System.out.println(st3.matches("[a-z]+")); System.out.println(st4.matches("[a-z]+")); } }
実行結果:
true false false false
説明:
実行結果から、文字列が指定した正規表現と完全に一致すると true 、一部が一致するだけの場合は false になっていることがわかります。
切り出し
charAt
操作:指定位置の1文字を切り出す(対象の文字列.charAt(指定位置))
サンプルプログラム:
public class Main {
public static void main(String[] args) {
String st1 = "Java の charAtメソッド 勉強中";
char c0 = st1.charAt(0);
char c5 = st1.charAt(5);
char c7 = st1.charAt(7);
char c18 = st1.charAt(18);
System.out.println(c0);
System.out.println(c5);
System.out.println(c7);
System.out.println(c18);
}
}
実行結果:
J の c 勉
説明:
実行結果から、文字列の位置を指定し1文字ずつ取得できていることがわかります。戻り値はchar型で受け取っています。
substring
操作:指定位置から文字列を切り出す(対象の文字列.substring(開始位置,終了位置))
サンプルプログラム:
public class Main { public static void main(String[] args) { String st1 = "JavaScript"; System.out.println("元の文章:" + st1); String subst1 = st1.substring(4, 10); System.out.println("抜き出した文章:" + subst1); } }
実行結果:
元の文章:JavaScript 抜き出した文章:Script
説明:
指定位置から文字列を切り出せていることが実行結果からわかります。もし、”JavaScript”から”Java”だけを切り出したい場合は st1.substring(0, 4) という指定になります。
変換
toLowerCase
操作:大文字を小文字に変換する(対象の文字列.toLowerCase())
サンプルプログラム:
public class Main { public static void main(String[] args) { String st1 = "JavaScript"; String st2 = "PHP"; String st3 = "Java"; System.out.println(st1.toLowerCase()); System.out.println(st2.toLowerCase()); System.out.println(st3.toLowerCase()); } }
実行結果:
javascript php java
説明:
実行結果を見ると、全角・半角共に大文字から小文字に変換されていることがわかります。
toUpperCase
操作:小文字を大文字に変換する(対象の文字列.toUpperCase())
サンプルプログラム:
public class Main { public static void main(String[] args) { String st1 = "JavaScript"; String st2 = "PHP"; String st3 = "Java"; System.out.println(st1.toUpperCase()); System.out.println(st2.toUpperCase()); System.out.println(st3.toUpperCase()); } }
実行結果:
JAVASCRIPT PHP JAVA
説明:
toLowerCaseとは逆で、小文字を大文字に変換します。toLowerCaseと同様に全角・半角共に小文字から大文字になっていることがわかります。
trim
操作:前後の空白を除去する(対象の文字列.trim())
サンプルプログラム:
public class Main { public static void main(String[] args) { // 半角スペース String st1 = " A B C "; // 全角・半角スペース String st2 = " あいうえお "; // 半角スペース String st3 = "Java の勉強 "; // trim前のlength System.out.print("trim前の文字数 : "); System.out.print(st1.length()+" "); System.out.print(st2.length()+" "); System.out.print(st3.length()+" "); // 改行 System.out.println(""); // trimで空白削除 System.out.println(st1.trim()); System.out.println(st2.trim()); System.out.println(st3.trim()); // trim前のlength System.out.print("trim後の文字数 : "); System.out.print(st1.trim().length()+" "); System.out.print(st2.trim().length()+" "); System.out.print(st3.trim().length()+" "); } }
実行結果:
trim前の文字数 : 7 7 9 A B C あいうえお Java の勉強 trim後の文字数 : 5 6 8
説明:
実行結果から、文字列の前後の空白が除去されていることがわかります。全角スペースは除去することができないため、注意が必要です。
replace
操作:文字列を置換する(対象の文字列.replace(“置換される文字列”, “置換する文字列”))
サンプルプログラム:
public class Main { public static void main(String[] args) { String st1 = "文字列の勉強をしています"; String st1Replace = st1.replace("文字列", "String"); System.out.println("置換前:"+st1); System.out.println("置換後:"+st1Replace); String st2 = "050-3090-0322"; String st2Replace = st2.replace("-", ""); System.out.println("置換前:"+st2); System.out.println("置換後:"+st2Replace); String st3 = " iPhone Android Mac Windows "; String st3Replace = st3.replace(" ", ""); System.out.println("置換前:"+st3); System.out.println("置換後:"+st3Replace); } }
実行結果:
置換前:文字列の勉強をしています 置換後:Stringの勉強をしています 置換前:050-3090-0322 置換後:05030900322 置換前: iPhone Android Mac Windows 置換後:iPhoneAndroidMacWindows
説明:
実行結果から、文字列が置換できていることがわかります。
replaceAll
操作:正規表現を用いて置換する(対象の文字列.replaceAll(“正規表現”, “置換する文字列”))
サンプルプログラム:
public class Main { public static void main(String[] args) { String st1 = "A b c d e F g h i j K"; String st1ReplaceAll = st1.replaceAll("[a-z]+", "0"); System.out.println("置換前:"+st1); System.out.println("置換後:"+st1ReplaceAll); String st2 = "A b c d e F g h i j K"; String st2ReplaceAll = st2.replaceAll("[a-zA-Z]", "5"); System.out.println("置換前:"+st2); System.out.println("置換後:"+st2ReplaceAll); String st3 = "1 2 3 4 5 6 7 8 9 1 0 1 1"; String st3ReplaceAll = st3.replaceAll("[0-9]", "ab"); System.out.println("置換前:"+st3); System.out.println("置換後:"+st3ReplaceAll); } }
実行結果:
置換前:A b c d e F g h i j K 置換後:A 0 0 0 0 F 0 0 0 0 K 置換前:A b c d e F g h i j K 置換後:5 5 5 5 5 5 5 5 5 5 5 置換前:1 2 3 4 5 6 7 8 9 1 0 1 1 置換後:ab ab ab ab ab ab ab ab ab ab ab ab ab
説明:
st2の実行結果を見てもらえるとわかる通り、大文字、小文字関係なく全てのアルファベットを数字に置換することができています。正規表現の方法はいろいろありますが、今回は[a-z]、[A-Z]、[0-9]を使用しました。
分割
split
操作:正規表現を用いて分割する(対象の文字列.split(“正規表現”))
サンプルプログラム:
public class Main { public static void main(String[] args) { String st1 = "JAVA-HTML,CSS,JavaScript-PHP"; System.out.println(st1); String[] nums1 = st1.split("[,-]"); for (int i = 0; i < nums1.length; i++) { System.out.println(nums1[i]); } } }
実行結果:
JAVA-HTML,CSS,JavaScript-PHP JAVA HTML CSS JavaScript PHP
説明:
カンマとハイフンが含まれた文字列をひとつずつ表示させてみました。
整形
format
操作:書式指定文字列を使い整形する(String.format(“書式文字列”, 値))
サンプルプログラム:
public class Main { public static void main(String[] args) { // 現在の時刻を取得 Date a = new Date(); System.out.println(String.format("%tY年 %tm月 %td日", a, a, a)); System.out.println(String.format("%tH時 %tM分 %tS秒", a, a, a)); } }
実行結果:
2022年 10月 05日 23時 22分 54秒
説明:
formatは使い方が難しいので、別記事で説明しようと思います。
日付/時刻の書式 | |
---|---|
書式 | 概要 |
Y | 年(4桁) |
m | 月(01~12) |
d | 日(01~31) |
H | 時(00~23) |
I | 時(01~12) |
M | 分(00~59) |
S | 秒(00~59) |
L | ミリ秒(000~999) |
D | 日付(%tm/%td/%tyと同じ) |
T | 時刻(%tH:%tM:%tSと同じ) |
正規表現
正規表現と表現例、またどんな文字列が合致するのか表を確認してみてください。
正規表現 | 意味 | 表現例 | 合致する文字列の例 |
* | 0回以上繰り返し | a* | ␣,a,aa,aaa |
+ | 1回以上繰り返し | ab+ | ab,abab,ababab,abb |
? | 0回 or 1回繰り返し | ba? | b,ba |
^ | 直後の文字が行の先頭にある場合にマッチ | ^Java | Java Programming |
$ | 直前の文字が行の末尾にある場合にマッチ | Programing$ | Java Programming |
. | 改行以外の任意の1文字にマッチ | . | A,1 |
| | OR条件として使用 | 0(7|8|9)0 | 070,080,090 |
{N} | N回繰り返し | (abc){3} | abcabcabc |
{M,N} | M回以上N回以下繰り返し | a{2,4} | aa,aaa,aaaa |
[A-Z] | 英大文字A-Zの任意1文字にマッチ | a[A-Z] | aA,aB,aX,aY |
[a-z] | 英小文字a-zの任意1文字にマッチ | b[a-z] | ba,bc,bx,by,bz |
[0-9] | 数字0-9の任意1文字にマッチ | c[0-9] | c1,c9,c0 |
関連記事
まとめ
いかがでしたか?サンプルコードを見ただけじゃわからないと思うので、実際に書いて動作を確認してみてください!
コメント