Stringクラスの特徴とメソッドまとめ
Java Silverの勉強をしていて、Stringクラスのメソッドをほとんど分かっていなかったのでまとめました!
- 特徴:immutable(不変)オブジェクトである
- Stringクラスのメソッドの引数(位置と範囲の指定)
- concat
- contains
- indexOf
- substring, subsequence
- charAt
- replace
- startsWith, endsWith
- 参考書籍、参考ページ
特徴:immutable(不変)オブジェクトである
immutableオブジェクトとは、一度セットしたフィールドの値をあとから変更できないオブジェクトのことです。
たとえばString s = "abc";
と書いた後、Stringの文字を置き換えるreplaceメソッドというもの(下で説明してます)を使ってs.replace("ab", "z")
と書いても、変数sの中身は変わりません。
置き換えの行われた文字列は戻り値として戻ってきます。
ほかにもStringクラスには様々なメソッドがありますが、基本的に戻り値を利用する必要があります。
Stringクラスのメソッドの引数(位置と範囲の指定)
Stringクラスのメソッドには、引数に位置や範囲を取るものがあります。
まず、引数に位置を取るものの代表例としてcharAt()があります。
charAtメソッドは、後述しますが、指定した引数の位置の文字を戻すメソッドです。
上の図のように、位置を指定したときは0から数えます。
次に、引数に範囲を取るものの代表例としてsubString()があります。
subStringメソッドは、後述しますが、指定した範囲の文字列を戻すメソッドです。
上の図のように、範囲を指定したときは文字の前・間・後に線を引き、0から番号を振っていくとわかりやすいです(って黒本に書いてありました)。
concat
concat()は、引数で指定した文字列を最後に連結するメソッドです。
s1.concat(s2)
とすると、文字列s1の後に文字列s2が結合された文字列が戻されます。
class ConcatSample{ public static void main(String[] args){ String s1 = "abc"; String s2 = "123"; String s3 = s1.concat(s2); System.out.println(s3); //abc123 } }
実行結果↓
abc123
ちなみに最初に説明したとおり、s1.concat(s2);
と書いたからといってs1の値が"abc123"に変化することはありません。s1は"abc"のままです。
contains
引数に指定された文字列を含むとき、trueを返します。そうでないときはfalseを返します。
class ContainsSample{ public static void main(String[] args){ String s1 = "abcde"; boolean b1 = s1.contains("bcd"); //文字列s1が"bcd"を含むか調べる System.out.println(b1); //true boolean b2 = s1.contains("c"); //1文字でもダブルクォーテーションで囲む System.out.println(b2); //true boolean b3 = s1.contains("p"); //文字列s1が"p"を含むか調べる System.out.println(b3); //false } }
実行結果↓
true true false
indexOf
indexOfは、引数で指定された文字が文字列のどの位置に存在するかを調べるためのメソッドです。
存在しないときは -1 を戻します。
class IndexOfSample{ public static void main(String[] args){ String s1 = "abcde"; System.out.println(s1.indexOf("a")); //0 System.out.println(s1.indexOf('d')); //3 System.out.println(s1.indexOf("de")); //3 System.out.println(s1.indexOf("e")); //4 System.out.println(s1.indexOf("x")); //-1 } }
実行結果↓
0 3 3 4 -1
substring, subsequence
substring()は、指定した範囲の文字列を抽出するメソッドです。
引数が1つの場合は抽出を開始する位置を、引数が2つの場合は抽出する範囲を指定します。(初めに説明したとおり、位置は0から始まり、範囲は間に線を引いて1から番号を振ります。)
class SubstringSample{ public static void main(String[] args){ String s1 = "abcde"; //引数が1つ String s2 = s1.substring(1); System.out.println(s2); //bcde //引数が2つ String s3 = s1.substring(1, 4); System.out.println(s3); //bcd //引数が範囲外 //String s4 = s1.substring(1, 100); //System.out.println(s4); //実行時エラーjava.lang.StringIndexOutOfBoundsException } }
実行結果↓
bcde bcd
また、subSequence()というメソッドも、substringと同じ動作をします。
charAt
charAtメソッドは、引数で指定したインデックスのchar値を返します。
class CharAtSample{ public static void main(String[] args){ String s = "abcde"; char c1 = s.charAt(0); System.out.println(c1); //a char c2 = s.charAt(2); System.out.println(c2); //c char c3 = s.charAt(4); System.out.println(c3); //e } }
実行結果↓
a c e
replace
replace()は、文字列の任意の部分を置き換えるメソッドです。
class ReplaceSample{ public static void main(String[] args){ String s = "abcde"; System.out.println(s.replace('a', 'X')); //Xbcde System.out.println(s.replace("bc", "X")); //aXde //以下のように、引数にString型とchar型を混ぜるとコンパイルエラー //System.out.println(s.replace("bc", 'X')); } }
実行結果↓
Xbcde aXde
ちなみに、正規表現を用いるreplaceAll(),replaceFirst()というメソッドもあります。↓
Javaで文字列を置換する:replace(), replaceAll(), replaceFirst() | UX MILK
startsWith, endsWith
startsWithは、引数で指定された文字列で始まるときtrueを、そうでないときfalseを戻すメソッドです。
class StartsWithSample{ public static void main(String[] args){ String s = "abcde"; System.out.println(s.startsWith("a")); //true System.out.println(s.startsWith("abc")); //true System.out.println(s.startsWith("e")); //false } }
実行結果↓
true true false
また、endsWithは、引数で指定された文字列で終わるときtrueを、そうでないときfalseを戻すメソッドです。
class EndsWithSample{ public static void main(String[] args){ String s = "abcde"; System.out.println(s.endsWith("e")); //true System.out.println(s.endsWith("cde")); //true System.out.println(s.endsWith("a")); //false } }
実行結果↓
true true false
参考書籍、参考ページ
徹底攻略 Java SE 8 Silver 問題集[1Z0-808]対応
- 作者: 志賀澄人,株式会社ソキウス・ジャパン
- 出版社/メーカー: インプレス
- 発売日: 2016/01/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る