java.svg

【Java】文字列操作

Java

参照

length

lengthは、文字列の文字数を返します。

String str = "abcdef";
int l = str.length();  //6

isEmpty

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);

compareTo

文字列はcompareToによって比較できます。

文字列の比較には文字コードが使用され、その大小関係を数値として返します。 比較対象より小さい場合は負、大きい場合は正、同じ場合は0を返します。

String str1 = "abc";
String str2 = "def";

boolean r1 = str1.compareTo(str2);  // -3
boolean r2 = str2.compareTo(str1);  // 3

maches

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");  //false

indexOf, lastIndexOf

indexOflastIndexOfは、対象の文字列が含まれるかを検索し、最初にヒットしたインデックスを返します。 対象がない場合は-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

replaceAllreplaceFirstは、正規表現に一致する部分を別の文字に置換します。

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

toUpperCasetoLowerCaseはそれぞれ英字を大文字、小文字に変換します。

String str1 = "abcDEF";

String str2 = str1.toUpperCase();  //"ABCDEF"
String str3 = str1.toLowerCase();  //"abcdef"

変換

valueOf

valueOfintなどの基本データ型を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);

フォーマットには次のようなものがあります。

フォーマット出力説明
%d10"10"10 進数
%o10"12"8 進数
%x20"14"16 進数
%03d10"010"先頭ゼロ詰め
%3d10" 10"先頭空白詰め
%-3d10"10 "末尾空白詰め
%,d123456"123,456"3 桁カンマ区切り
%f12.56"12.560000"浮動小数点
%.0f12.56"12"小数点以下切り捨て
%.1f12.56"12.6"小数点第二位を四捨五入
%s"abc""abc"文字列
%4s"abc"" abc"先頭空白詰め
%-4s"abc""abc "末尾空白詰め