LoginSignup
0
0

More than 1 year has passed since last update.

Javaの学習 ~String~

Posted at

Stringクラス

java.lang.Stringクラスのこと。配列を内部に隠蔽しているため、文字列操作が可能なメソッドを提供することができます。

Stringクラスのインスタンス生成

String a = new String("こんにちは");   //newを使う

String b = "こんばんは";   //newは省略できる

//☆文字列であるため、ダブルクォーテーション!

Stringオブジェクトは不変な(immutable)オブジェクト

オブジェクトに一度セットしたフィールドの値を、後から変更できるオブジェクトを「可変なオブジェクト」、変更できないオブジェクトを「不変なオブジェクト」と呼びます。
その「不変なオブジェクト」の代表例がStringオブジェクトです。

不変と聞くと全く中身を変えることができないように感じますが、
以下のコードで見てみると犬が猫に変わっていることが分かります。

String str = "犬";
str = "猫";
System.out.println(str);

//実行結果

一見、値が書き換えられたように思えますが、値そのものが書き換えられたのではありません。
参照型であるStringオブジェクトは、フィールドに別の値が代入されると、新たな別のアドレスを確保し、そのアドレスに対応する値に別の値を保管します。

このような事も起こりうるため、オブジェクトの内部データを変更できないように定義することがあります。
方法は次の4つです。
①全てのフィールドをprivateで修飾する
②setterメソッドなどの、内部データを変更できるメソッドを提供しない
③クラスをfinalで宣言し、オーバーライドを防ぐ
④getterメソッドなどを提供しない

//例
public final class Sample {
    private final String name;
    public Sample(String name) {
        this.name = name;
    }
    public void dog() {
        System.out.println(name + "ちゃん");
    }
}

Stringクラスのメソッド

valueOfメソッド

valueOfメソッドを使うと、値をString型に変換することができます。

//使用例
int a = 100;
String str = String.valueOf(a);
System.out.println(str);
toStringメソッド

valueOfメソッドと同様、値をString型に変換することができます。

//使用例
int b = 200;
String str = Integer.toString(b);
System.out.println(str);

valueOfメソッドtoStringメソッドの違い
以下のような、変換する値がnullの場合に、動作の違いが現れます。

int c = null;
        
//valueOfの場合
String d = String.valueOf(c);
System.out.println(d);
//結果・・・String型のnullが返される
null
        
//toStringの場合
String e = Integer.toString(c);
System.out.println(e);
//結果・・・例外がスローされる(java.lang.NullPointerException)
replaceAllメソッド

replaceAllメソッドは、文字列を検索し、該当する部分を指定の文字列に置換する機能を持ちます。
※検索部分に正規表現を使用する事もある。正規表現を使用しない場合は、Allを省いた後述するreplaceメソッドを使う事もできるが、結局は内部処理でreplaceAllを呼び出しているとのこと。

String f = "hellocathello";
//replaceAll(検索する文字列, 置換する文字列);
f = f.replaceAll("hello", "bye");
System.out.println(f);

//結果
byecatbye
replaceメソッド

replaceAll同様、文字列を置き換えるためのメソッドです。

String f = "aaaaa";
System.out.println(f.replace("aa", "b"));

//結果
bba
String f = "aaaaa";
System.out.println(f.replace('a', 'b'));

//結果
bbbbb

指定した引数が存在しない場合は、元のままの文字列が返されます。

String f = "aaaaa";
System.out.println(f.replace("zz", "b"));

//結果
aaaaa

以下のように、char型とCharSequence型が混在する場合、コンパイルエラーとなります。

String f = "aaaaa";
System.out.println(f.replace("aa", 'b'));
charAtメソッド

このメソッドは、文字列の中から引数で指定した位置にある1文字を取り出します。
位置(順番)の数え方は配列と同じで、0,1,2,3・・・と0から順番に左から数えていきます。
※文字列が存在しない位置を引数として指定すると、java.lang.StringIndexOutOfBoundsExceptionの例外がスローされます。

String g = "abcde";
System.out.println(g.charAt(2));

//abcde
//↓↓↓↓↓
//01234(順番)

//結果
c
indexOfメソッド

引数で指定された文字が、文字列のどの位置に存在するか調べてくれます。
これも、位置の数え方は配列と同じです。

String h = "abcde";
System.out.println(h.indexOf('a'));
System.out.println(h.indexOf('z'));

//結果
//※同じの文字が複数ある場合は、最初に存在する位置を教えてくれる。
0
//指定の文字が存在しない場合は、-1を返す。
-1
substringメソッド

数字で引数を指定し、文字列から任意の文字列を取り出します。
取り出す際のイメージは以下の通りです。

| a | b | c | d | e |
「|」の左から順に0,1,2,3,4,5...と番号を振っていきます。

●引数を2つ指定
例えば、0と3を引数に指定すると、「abc」を抜き取ります。
1と5を引数に指定すると、「bcde」を抜き取ります。

String i = "abcde";
System.out.println(i.substring(0, 3));
System.out.println(i.substring(1, 5));

//結果
abc
bcde

●引数を1つ指定
例えば、2を引数に指定すると、「|」の2番以降の文字列「cde」を抜き取ります。

String j = "abcde";
System.out.println(j.substring(2));

//結果
cde
lengthメソッド

文字数を返すメソッドです。
半角英数字も全角文字も、どちらも1文字として扱われます。

String k = "abcde";
System.out.println(k.length());

//結果
5
startsWithメソッド

文字列が指定の引数から始まるかを調べてくれます。結果はtruefalseの真偽値で返されます。

String l = "hello";
System.out.println(l.startsWith("he"));

//結果
true
endsWithメソッド

文字列が指定の引数で終わっているかを調べてくれます。こちらも結果は真偽値で返されます。

String m = "hello";
System.out.println(m.endsWith("o"));

//結果
true

まとめ

最後まで閲覧いただきありがとうございました。どれもすごく便利なメソッドであると思いました。
ただ、全てのメソッドを網羅できたわけではないので、今後も新しいことを勉強していきたいです。
間違い等あれば、コメントお願いいたします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0