【Java】文字列操作
参照
length
lengthは、文字列の文字数を返します。
String str = "abcdef";
int l = str.length(); //6isEmpty
isEmptyは、文字列が空文字("")であるかを判定し、その結果を真偽値で返します。
String str1 = "";
boolean r1 = str1.isEmpty(); //true
String str2 = "abc";
boolean r2 = str2.isEmpty(); //false比較
equals
文字列を比較する場合、等価演算子(==)ではなく、 equalsを使用します。
文字列だけの話ではないのですが、等価演算子は値の比較でなくアドレスの比較になります。
またリテラルと変数を比較する場合は、リテラルのequalsの引数に変数を設定します。
これは、仮にstr1.equals("abc")として場合に、str1 = nullだとNullPointerExceptionが発生してしまうからです。
String str1 = "abc";
boolean r1 = str1 == "abc"; // false
boolean r2 = "abc".equals(r1);equalsIgnoreCase
equalsは大文字、小文字を区別するのに対し、equalsIgnoreCaseは区別しません。
String str = "HELLO";
boolean r1 = "hello".equals(str); //false
boolean r2 = "hello".equalsIgnoreCase(str); //truecompareTo
文字列はcompareToによって比較できます。
文字列の比較には文字コードが使用され、その大小関係を数値として返します。
比較対象より小さい場合は負、大きい場合は正、同じ場合は0を返します。
String str1 = "abc";
String str2 = "def";
boolean r1 = str1.compareTo(str2); // -3
boolean r2 = str2.compareTo(str1); // 3maches
machesは、文字列が指定された正規表現と一致するかを判定し、その結果を真偽値で返します。
正規表現については割愛します。
String str = "abc";
boolean r1 = str.matches("^[a-z]+$"); //true
boolean r2 = str.matched("^[A-Z]+$"); //false連結
+
最もメジャーな方法として、+を用いる方法があります。
しかし、パフォーマンスに問題があるため、多くのデータを連結する場合には使用しないほうが良いです。
String str = "abc";
str = str + "def"; //"abcdef"concat
concatは文字列を連結するメソッドであり、+よりもパフォーマンスは良いです。
それでも次に説明するStringBuilderには劣ります。
String str = "abc";
str = str.concat("def");StringBuilder
StringBuilderは文字列を連結するように定義されたクラスです。
通常、多くのデータを連結する場合にはこれを使用します。
StringBuilder sb = new StringBuilder();
sb.append("abc");
sb.append("def");
String str = sb.toString();検索
contains
containsは、対象の文字列が含まれるかを検索し、その結果を真偽値で返します。
String str = "abcdefgabcdefg";
boolean r1 = str.contains("cd"); //true
boolean r2 = str.contains("cc"); //falsestartsWith, endsWith
startsWithとendsWithは、対象の文字列が指定した文字列で始まるまたは終わるかを判定し、その結果を真偽値で返します。
String str = "abcdefgabcdefg";
boolean r1 = str.startsWith("ab"); //true
boolean r2 = str.startsWith("ac"); //false
boolean r3 = str.endsWith("efg"); //true
boolean r4 = str.endsWith("feg"); //falseindexOf, lastIndexOf
indexOfとlastIndexOfは、対象の文字列が含まれるかを検索し、最初にヒットしたインデックスを返します。
対象がない場合は-1を返します。
ふたつのメソッドの違いは、先頭から検索するか、末尾から検索するかです。
またindexOfのみ、第二引数に検索開始インデックスを指定できます。
String str = "abcdefgabcdefg";
int idx1 = str.indexOf("cd"); //2
int idx2 = str.indexOf("cd", 3); //9
int idx3 = str.lastIndexOf("cd"); //9
int idx4 = str.indexOf("cc"); //-1編集
replace
replaceは指定した文字と一致する部分をすべて別の文字に置換します。
String str1 = "abcdefgabcdefg";
String str2 = str1.replace("abc", "xyz"); //"xyzdefgxyzdefg"replaceAll, replaceFirst
replaceAllとreplaceFirstは、正規表現に一致する部分を別の文字に置換します。
replaceAllは全てを置換し、replaceFirstは一致した最初の文字のみ置換します。
String str1 = "abcdefgabcdefg";
String str2 = str1.replaceAll("[a|d]", "X"); //"XbcXeggXbcXefg"
String str3 = str1.replaceFirst("[a|d]", "X"); //"Xbcdefgabcdefg"substring
substringは、指定したインデックスの範囲の文字列を切り取ります。
インデックスの指定が 1 つの場合は、そのインデックス以降の全ての文字列を切り取ります。
String str1 = "abcdefg";
String str2 = str1.substring(2, 5); //"cde"
String str3 = str1.substring(4); //"efg"split
splitは正規表現に一致する文字で分割し、文字列配列を返します。
String str = "abc,def,ghi";
String[] strAry = str.split(",");trim
trimは文字の先頭、末尾の半角スペースを削除します。
String str1 = " abc def ";
String str2 = str1.trim(); //"abc def"toUpperCase, toLowerCase
toUpperCase、toLowerCaseはそれぞれ英字を大文字、小文字に変換します。
String str1 = "abcDEF";
String str2 = str1.toUpperCase(); //"ABCDEF"
String str3 = str1.toLowerCase(); //"abcdef"変換
valueOf
valueOfはintなどの基本データ型をStringに変換するstaticなメソッドです。
String str1 = String.valueOf(10); //"10"
String str2 = String.valueOf(true); //"true"format
formatは基本データ型などを指定したフォーマットの文字列に変換するstaticなメソッドです。
例えば10を"0010"と変換する場合は次のようにします。
String str = String.format("%04d", 10);フォーマットには次のようなものがあります。
| フォーマット | 値 | 出力 | 説明 |
|---|---|---|---|
%d | 10 | "10" | 10 進数 |
%o | 10 | "12" | 8 進数 |
%x | 20 | "14" | 16 進数 |
%03d | 10 | "010" | 先頭ゼロ詰め |
%3d | 10 | " 10" | 先頭空白詰め |
%-3d | 10 | "10 " | 末尾空白詰め |
%,d | 123456 | "123,456" | 3 桁カンマ区切り |
%f | 12.56 | "12.560000" | 浮動小数点 |
%.0f | 12.56 | "12" | 小数点以下切り捨て |
%.1f | 12.56 | "12.6" | 小数点第二位を四捨五入 |
%s | "abc" | "abc" | 文字列 |
%4s | "abc" | " abc" | 先頭空白詰め |
%-4s | "abc" | "abc " | 末尾空白詰め |
文字
charAt
指定したインデックスの文字(char)を返します。
インデックス範囲を超えた場合はStringIndexOutOfBoundsExceptionの例外が投げられます。
String str = "hello";
System.out.println(str.charAt(1)); //'e'
System.out.println(str.charAt(4)); //'o'
System.out.println(str.charAt(5)); //StringIndexOutofBoundsExceptiontoCharArray
文字列を1文字ずつ分解し、文字配列(char[])を返します。
String str = "hello";
char[] ary = str.toCharArray(); //['h', 'e', 'l', 'l', 'o']
Arrays.sort(ary); //['e', 'h', 'l', 'l', 'o']char[]はvalueOf()でStringに変換することができます。
String str2 = String.valueOf(ary); //"ehllo"