ここではJavaのStringクラスを使った文字列の操作について紹介します。
目次
文字列を編集する
文字列を結合する(concatメソッド)
concatメソッドは、文字数の末尾に指定した文字列を結合します。
String str1 = "Java";
String str2 = "の基本";
// str1の末尾にstr2を結合する
str1 = str1.concat(str2);
System.out.println(str1); // 実行結果:Javaの基本
文字列を結合する(StringBuilderクラスのappendメソッド)
StringBuilderクラスのappendメソッドを利用しても文字列を結合できます。
String str1 = "Java";
String str2 = "の基本";
// str1とstr2を結合する
StringBuilder str3 = new StringBuilder();
str3.append(str1);
str3.append(str2);
System.out.println(str3); // 実行結果:Javaの基本
文字列の長さを取得する
文字列の長さを取得する(lengthメソッド)
lengthメソッドは、文字列の文字数をUnicode単位で取得するメソッドです。ただし、文字列にサロゲートペア(1つの文字に対して2つの文字コードを使って表される文字)が含まれる場合には正しい値になりません。サロゲートペアが含まれる場合はcodePointCountメソッドを使用してください。
String str = "Javaの基本";
// 文字列の文字数を出力する
System.out.println(str.length()); // 実行結果:7
文字列の長さを取得する(codePointCountメソッド)
codePointCountメソッドは、サロゲートペアが含まれる文字列の文字数をコードポイント単位で取得するメソッドです。引数として開始と終了の位置が必須となります。
String str = "𠮟";
// lengthメソッドで文字列の文字数を出力する
System.out.println(str.length()); // 実行結果:2
// codePointCountで文字列の文字数を出力する
System.out.println(str.codePointCount(0, str.length())); // 実行結果:1
文字列を検索する
指定位置の文字を取得する(charAtメソッド)
charAtメソッドは、文字列から指定位置の1文字を取得するメソッドです。文字列の先頭を0番目として数えます。
String str = "Javaの基本がわかるJavaの本";
// 先頭から6番目の文字を出力する
System.out.println(str.charAt(5)); // 実行結果:基
指定文字の最初の位置を取得する(indexOfメソッド)
indexOfメソッドは、指定した文字または文字列が最初に見つかった位置を取得するメソッドです。文字列の先頭を0番目としたインデックスを取得します。文字列が見つからなかった場合は-1を返します。
String str = "Javaの基本がわかるJavaの本";
// "Java"が最初に見つかった位置を出力する
System.out.println(str.indexOf("Java")); // 実行結果:0
指定文字の最後の位置を取得する(lastIndexOfメソッド)
lastIndexOfメソッドは、指定した文字または文字列が最後に見つかった位置を取得するメソッドです。文字列の先頭を0番目としたインデックスを取得します。文字列が見つからなかった場合は-1を返します。
String str = "Javaの基本がわかるJavaの本";
// "Java"が最後に見つかった位置を出力する
System.out.println(str.lastIndexOf("Java")); // 実行結果:11
文字列の一部を取得する
文字列の一部を取得する(substringメソッド)
substringメソッドは、指定した開始位置から終了位置までの文字列を取得します。位置は文字列の先頭を0番目としたインデックスを指定します。
String str = "Javaの基本";
// 1文字目から4文字を取得する
System.out.println(str.substring(0, 4)); // 実行結果:Java
文字列を置換する
文字列を置換する(replaceメソッド)
replaceメソッドは、対象の文字列から第1引数で指定した文字列を検索して、第2引数に指定した文字列に置換します。
String str1 = "ABC123DEF123";
// "123"を"***"に置換する
String str2 = str1.replace("123", "***");
System.out.println(str2); // 実行結果:ABC***DEF***
文字列を正規表現で置換する(replaceAllメソッド)
replaceAllメソッドは、対象の文字列から第1引数で指定した正規表現のパターンで文字列を検索して、第2引数に指定した文字列に置換します。
String str1 = "ABC123DEF123";
// 0から9までの数字を"*"に置換する
String str2 = str1.replaceAll("[0-9]", "*");
System.out.println(str2); // 実行結果:ABC***DEF***
最初の検索した文字列のみ置換する(replaceFirstメソッド)
replaceFirstメソッドは、対象の文字列から第1引数で指定した文字列を検索して、最初に見つかった文字列のみ第2引数に指定した文字列に置換します。
String str1 = "ABC123DEF123";
// "123"を"***"に置換する
String str2 = str1.replaceFirst("123", "***");
System.out.println(str2); // 実行結果:ABC***DEF123
文字列を分割する
文字列を分割する(splitメソッド)
rsplitメソッドは、区切り文字位置で文字列を分割して、分割した結果を文字列配列として返します。
String str1 = "ABC,DEF,GHI";
// ","の位置で文字列を分割して配列に格納する
String[] str2 = str1.split(",");
for (String str : str2) {
System.out.println(str);
}
// 実行結果
// ABC
// DEF
// GHI
文字列の前後の空白を除去する
文字列の前後の空白を削除する(trimメソッド)
trimメソッドは、文字列の先頭と末尾にある空白文字(半角スペース・改行文字・タブ文字)を削除して返します。
String str1 = " ABCDEF\t";
// 文字列の前後の空白を削除する
String str2 = str1.trim();
System.out.println("[" + str1 + "]"); // 実行結果:[ ABCDEF ]
System.out.println("[" + str2 + "]"); // 実行結果:[ABCDEF]
文字列の大文字/小文字を変換する
文字列の大文字を小文字に変換する(toLowerCaseメソッド)
toLowerCaseメソッドは、文字列に含まれる大文字を小文字に変換します。シングルバイト文字だけでなく、マルチバイト文字でも変換します。
String str = "JavaとBasic";
// 大文字を小文字に変換する
System.out.println(str.toLowerCase()); // 実行結果:javaとbasic
文字列を小文字を大文字に変換する(toUpperCaseメソッド)
toUpperCaseメソッドは、文字列に含まれる小文字を大文字に変換します。シングルバイト文字だけでなく、マルチバイト文字でも変換します。
String str = "JavaとBasic";
// 小文字を大文字に変換する
System.out.println(str.toUpperCase()); // 実行結果:JAVAとBASIC
文字列の状態を調べる
文字列が空文字か調べる(isEmptyメソッド)
isEmptyメソッドは、文字列が空文字(長さ0)かを調べます。長さが0の場合は true、長さが0ではないの場合は false を返します。ただし、null を判定すると NullPointerException 例外が発生しまいます。
String str1 = "";
String str2 = " ";
String str3 = null;
System.out.println(str1.isEmpty());
System.out.println(str2.isEmpty());
System.out.println(str3.isEmpty()); // nullを判定すると例外が発生する
// 実行結果
// true
// false
// Exception in thread
文字列がnullか調べる
isEmptyメソッドで null を判定すると NullPointerException 例外が発生しまいますので、比較演算子の==や!=を使って判定します。
String str1 = null;
System.out.println(str1 == null);
// 実行結果
// true
文字列を大文字・小文字を区別して比較する(equalsメソッド)
equalsメソッドは、引数で指定した文字列を大文字と小文字の区別して比較し、等しい場合は true を返し、等しくない場合は false を返します。ただし、null を判定すると NullPointerException 例外が発生しまいます。
String str1 = "ABCDEF";
String str2 = "abcdef";
// 文字列を比較する
if (str1.equals(str2)) {
System.out.println(str1 + "と" + str2 + "は等しい");
} else {
System.out.println(str1 + "と" + str2 + "は違う");
}
// 実行結果
// ABCDEFとabcdefは違う
文字列を大文字・小文字を区別しないで比較する(equalsIgnoreCaseメソッド)
equalsIgnoreCaseメソッドは、引数で指定した文字列を大文字と小文字の区別しないで比較し、等しい場合は true を返し、等しくない場合は false を返します。ただし、null を判定すると NullPointerException 例外が発生しまいます。
String str1 = "ABCDEF";
String str2 = "abcdef";
// 文字列を比較する
if (str1.equalsIgnoreCase(str2)) {
System.out.println(str1 + "と" + str2 + "は等しい");
} else {
System.out.println(str1 + "と" + str2 + "は違う");
}
// 実行結果
// ABCDEFとabcdefは等しい
文字列が指定した接頭辞を持つか調べる(startsWithメソッド)
startsWithメソッドは、文字列が指定された文字列で始まるかどうかを判定します。
String str = "http://www.sample.com";
// "htttp"で始まるか調べる
if (str.startsWith("http")) {
System.out.println("文字列あり");
} else {
System.out.println("文字列なし");
}
// 実行結果:文字列あり
文字列が指定した接尾辞を持つか調べる(endsWithメソッド)
endsWithメソッドは、文字列が指定された文字列で終わるかどうかを判定します。
String str = "http://www.sample.com";
// ".jp"で終わるか調べる
if (str.endsWith(".jp")) {
System.out.println("文字列あり");
} else {
System.out.println("文字列なし");
}
// 実行結果:文字列なし
以上、JavaのStringクラスを使った文字列の操作について解説しました。