マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

Stringのメソッドを適当にまとめてみる

最近、Javaのことについて書いてないので適当にStringのメソッドでも適当にまとめてみた。リファレンスからいくつかのメソッドを紹介(といっても結構取り上げてる気がするが)する。あと申し訳ない程度のサンプルを載せた。なんとなくコンストラクタは省略した

charAt(int index)
指定されたインデックス位置にあるchar返す
String str = "ABC";

//Aが返ってくる
System.out.println(str.charAt(0));
compareTo(String anotherString)
2つの文字列を辞書的に比較する。大文字小文字を区別する
//違う文字列同士の比較
String str = "ABC";
String another = "DEF";

//ABCはDEFよりも辞書的に前なので負の数が返ってくる
System.out.println(str.compareTo(another));
//DEFはABCよりも辞書的に後ろなので正の数が返ってくる
System.out.println(another.compareTo(str));
//同じ文字列同士の比較
String str = "ABC";
String another = "ABC";

//0が返ってくる
System.out.println(str.compareTo(another));
//大文字小文字の比較
String str = "ABC";
String another = "abc";

//負の数が返ってくる
System.out.println(str.compareTo(another));
compareToIgnoreCase(String str)
大文字と小文字の区別なしで、2つの文字列を辞書的に比較する
//大文字小文字の比較
String str = "ABC";
String another = "abc";

//0が返ってくる
System.out.println(str.compareToIgnoreCase(another));
concat(String str)
指定された文字列をこの文字列の最後に連結する。+演算子でも結合できるので、これを使う必要は無い
String str = "ABC";
String another = "DEF";
String constr = str.concat(another);

//str自身に変化は無し
System.out.println(str);
//strとanotherが繋がった文字列
System.out.println(constr);
contains(CharSequence s)
この文字列が指定された文字シーケンスを含む場合に限りtrueを返す
String str = "筑波大学";
String another = "大学";

//strにanotherが含まれてるのでtrueが返る
System.out.println(str.contains(another));
String str = "筑波大学";
String another = "東京大学";

//strにanotherが含まれてないのでfalseが返る
System.out.println(str.contains(another));
String str = "筑波大学";
StringBuilder another = new StringBuilder("大学");

//引数はCharSequenceを実装していれば何でもOK
System.out.println(str.contains(another));
equals(Object anObject)
この文字列と指定されたオブジェクトを比較する。文字列の比較にどうぞ
String str = "Java";
String another = "Java";

//同じ内容の文字列なのでtrueが返る
System.out.println(str.equals(another));
String str = "Java";
String another = "JAVA";

//大文字小文字は区別されるのでfalse
System.out.println(str.equals(another));
String str = null;

//NullPointerException発生!
System.out.println(str.equals("Java"));
String str = null;

//これだとNullPointerExceptionを回避できる。結果はfalse
System.out.println("Java".equals(str));
equalsIgnoreCase(String anotherString)
この文字列と他の文字列を比較する。大文字小文字を区別しない
String str = "Java";
String another = "JAVA";

//trueが返る
System.out.println(str.equalsIgnoreCase(another));
format(String format, Object... args)
指定された書式の文字列と引数を使って、書式付き文字列を返す。Java 1.5から利用可能
String str = String.format("%s %1.1f %s", "Java", 1.5f, "から使えます", 1234);

//Java 1.5 から使えます 1234 と表示される
System.out.println(str);
indexOf(String str)
この文字列内で、指定された文字列が最初に出現する位置を返す
String str = "hogehigehoge";
String another = "hige";

//4が返ってくる(最初の文字は0番目)
System.out.println(str.indexOf(another));
String str = "hogehigehoge";
String another = "hoge";

//0が返ってくる
System.out.println(str.indexOf(another));
indexOf(String str, int fromIndex)
指定されたインデックス以降で、指定された文字列がこの文字列内で最初に出現する位置を返す。
String str = "hogehigehoge";
String another = "hoge";

//8を返す
System.out.println(str.indexOf(another, 1));
String str = "hogehigehoge";
String another = "hoge";

//先頭からの位置を返すため、後ろの値を変えても同じ部分に一致するなら同じ値が返る
System.out.println(str.indexOf(another, 4));
isEmpty
String#length()が0である場合にかぎり、trueを返す。Java 1.6から使える
String str = "";

//trueを返す
System.out.println(str.isEmpty());
String str = "文字列";

//falseを返す
System.out.println(str.isEmpty());
String str = null;

//当然のことながらNullPointerException
System.out.println(str.isEmpty());
lastIndexOf(String str)
この文字列内で、指定された部分文字列が一番右に出現する位置を返す。
String str = "hogehigehoge";
String another = "hoge";

//右のhogeの位置である8が返る
System.out.println(str.lastIndexOf(another));
lastIndexOf(String str, int fromIndex)
この文字列内で、指定された文字列が最後に出現する位置を返す (検索は指定されたインデックスから開始され、先頭方向に行われる)。
String str = "hogehigehoge";
String another = "hoge";

//0が返る
System.out.println(str.lastIndexOf(another, 4));
length()
この文字列の長さを返す。
String str = "hogehigehoge";

//12文字あるので12が返る
System.out.println(str.length());
String str = "筑波大学最高!";

//7文字あるので7が返る
System.out.println(str.length());
matches(String regex)
この文字列が、指定された正規表現と一致するかどうかを判定する。
String str = "1234hoge";
String another = "\\d{4}hoge";

//trueが返る
System.out.println(str.matches(another));
String str = "hage  12968457838743985 hoge";
String another = "\\w{4}\\s+\\d+ hoge";

//trueが返る
System.out.println(str.matches(another));
replace(CharSequence target, CharSequence replacement)
targetに一致する部分文字シーケンスをreplacementに置き換えた文字列を返す
String str = "東京大学";
String target = "東京";
String replacement = "筑波";

String after = str.replace(target, replacement);
//元の文字列には影響がない
System.out.println(str);
//筑波大学が返っている
System.out.println(after);
String str = "hogehigehoge";
String target = "hoge";
String replacement = "hige";

String after = str.replaceAll(target, replacement);
//hogeが全てhigeに変更されている
System.out.println(after);
replaceAll(String regex, String replacement)
正規表現に一致する部分を全て置き換える
String str = "hogehigehoge";
String target = "h\\w{3}";
String replacement = "foo";

String after = str.replaceAll(target, replacement);
//当然ながら元の文字列に影響は無い
System.out.println(str);
//hから始まる4文字の部分文字列が全てfooに変わる
System.out.println(after);
String str = "1234567890";
String target = "\\d";
String replacement = "a";

//数値が全部aになっている
System.out.println(str.replaceAll(target, replacement));
split(String regex)
この文字列を、指定された正規表現に一致する位置で分割する。正規表現が使われていることに注意。特に.などを区切り文字にする場合\\を忘れないように。
String str = "2010/08/26";
String[] elements = str.split("/");

for(int i = 0; i < elements.length; i++){
    System.out.println(elements[i]);
}

//1.5以降なら拡張for文が使える
for(String element : elements){
    System.out.println(element);
}
String str = "255.255.255.255";
String[] elements = str.split("\\.");

for(String element : elements){
    System.out.println(element);
}
startsWith(String prefix)
この文字列が、指定された接頭辞で始まるかどうかを判定する
String str = "JavaScript";
String prefix = "Java";

//trueが返ってくる
System.out.println(str.startsWith(prefix));
String str = "JavaScript";
String prefix = "C#";

//falseが返ってくる
System.out.println(str.startsWith(prefix));
endsWith(String suffix)
この文字列が、指定された接尾辞で終るかどうかを判定する
String str = "JavaScript";
String prefix = "Script";

//trueが返ってくる
System.out.println(str.endsWith(prefix));
substring(int beginIndex)
この文字列の部分文字列である新しい文字列を返す
String str = "JavaScript";
String after = str.substring(4);

//元の文字列には影響無し
System.out.println(str);
//Scriptが返ってる
System.out.println(after);
substring(int beginIndex, int endIndex)
この文字列の部分文字列である新しい文字列を返す。
String str = "JavaScript";

//2〜4文字目が返ってくる
System.out.println(str.substring(2, 5));
toLowerCase()
この文字列内のすべての文字を小文字に変換する
String str = "JAVA";
String after = str.toLowerCase();

//しつこいようだけど、元の文字列には影響なし
System.out.println(str);
//全て小文字に
System.out.println(after);
toUpperCase()
この文字列内のすべての文字を大文字に変換する
String str = "java";

//全て大文字に
System.out.println(str.toUpperCase());
trim()
先頭と最後の空白を除いた文字列を返す
String str = " Java ";
String after = str.trim();

//こうしても元の文字列に変化はない
System.out.println(str);
//両端のスペースが消されている
System.out.println(after);
String str = " Java ";

//全角スペースは消えない
System.out.println(str);