いつか、技術ブログを

新人SE(研修中)が技術ブログを書きたがっているブログです

Stringクラスの特徴とメソッドまとめ

Java Silverの勉強をしていて、Stringクラスのメソッドをほとんど分かっていなかったのでまとめました!

特徴: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

参考書籍、参考ページ

String (Java Platform SE 8)

徹底攻略 Java SE 8 Silver 問題集[1Z0-808]対応

徹底攻略 Java SE 8 Silver 問題集[1Z0-808]対応