java.lang.Stringクラスの色々なメソッドについて

### java.lang.Stringクラスとは

java.lang.Stringクラスは、文字列を扱うために実装されているクラス。java.lang内に実装されているクラスのため、importをすることなく利用することができる。
また、stringクラスは**new演算子を使わなくてもオブジェクトを生成することが可能**で、String str = “こんにちは”のような記述をになる。

### さまざまなメソッド

Stringクラスには、変数aと変数bの値が同じかどうかを調べるものや変数aの値の文字数を調べる等、色々なメソッドが用意されている。

### 目次
|メソッド名|簡単なメソッドの説明|詳しいメソッドの説明|
|:-----------|------------:|:------------:|
|equals|比較している文字列が正しいかどうかを調べる|1. [equalsメソッドの解説](#equalsメソッド)|
|length|文字列の長さを文字数で返す|2. [lengthメソッドの解説](#lengthメソッド)|
|indexOf|文字列に含まれる部分文字列を検索|3. [indexOfメソッドの解説](#indexOfメソッド)|
|charAt|引数で指定された位置にある１文字だけを抜き出して戻す|４. [charAtメソッドの解説](#charAtメソッド)|
|substring|文字列から任意の文字列を抽出する|5. [substringメソッドの解説](#substringメソッド)|
|replace|文字列を置き換える|6. [replaceメソッドの解説](#replaceメソッド)|
|startsWith|文字列が引数で指定された文字で始まるかどうかを調べる|7. [startsWithメソッドの解説](#startsWithメソッド)|
|endsWith|引数の文字で終わっているかどうかを調べる|8. [endsWithメソッドの解説](#endsWithメソッド)|
|concat|インスタンスが保持する文字列を、引数として渡された文字列と連結し、新しい文字列を戻す|9. [concatメソッドの解説](#concatメソッド)|
|append|文字列に新しい文字列を追加する|10. [appendメソッドの解説](#appendメソッド)|
|reverse|文字列を反転させる|11. [reverseメソッドの解説](#reverseメソッド)|
|intern|コンスタントプールを含むメモリ内の文字列を探して、再利用|12. [internメソッドの解説](#internメソッド)|





---
### equalsメソッド
このメソッドは、Objectクラスに定義されているため、すべてのクラスが引き継いでいる。しかし、同値性の確認方法は各クラスによって異なるため、equalsメソッドは**オーバーライドして使うことを前提**としている。このメソッドをオーバーライドするときには、次のような条件を満たさないといけない。

>- null以外の参照値xがあった時、x.equals(x)はtrueを返すこと
>- null以外の参照値xとyがあった時、y.equals(x)がtrueを返す場合は、x.equals(y)はtrueを返すこと
>- null以外の参照値xとy、zがあった時、x.equals(y)がtrueを返し、y.equals(z)がtrueを返す場合、x.equals(z)はtrueを返すこと
>- null以外の参照値xとyがあった時、x.equals(y)を複数回呼び出しても、比較で使われた情報が変更されていなければ、一貫してtrueを返すか、一貫してfalseを返すこと
>- null以外の参照値xについて、x.equals(null)はfalseを返すこと

これらの条件は、APIドキュメントに掲載されており、オーバーライドするときには条件を満たすよう実装しなければいけない。

メソッドの定義方法
```
String str1 = "おはよう";
String str2 = "こんにちは";
System.out.println(str1.equals(str2));

//実行結果
false
```
---
### lengthメソッド
このメソッドは、文字列を返す際に、**半角英数字も全角英数字も同じ**ように文字列を戻す。そのため、半角も全角も１文字としてカウントされる。

メソッドの定義方法
```
string str = "abc";
System.out.println(str.length());

//実行結果
3
```
---
### indexOfメソッド
このメソッドは、位置を調べたい文字をchar型で渡す以外にも、文字列を渡すこともできる。文字列を引数に渡した場合、このメソッドはその文字列が始まる**最初の文字位置**（0を基準とする）を戻す。

メソッドの定義方法（引数が文字の場合）
```
String str = "abcde";
System.out.println(str.indexOf('c'));

//実行結果
2
```
メソッドの定義方法（引数が文字列の場合）
```
String str = "abcde";
System.out.println(str.indexOf('bc'));

//実行結果
1
```

---
### charAtメソッド
このメソッドはStringクラスの代表的なメソッドの1つ。インスタンスが保持している文字列から、引数で指定された位置にある１文字だけを抜き出して戻す。引数には**抜き出したい文字の位置**を指定する。文字番号の開始は０から始める。

メソッドの定義方法
```
String str = "こんにちは";
System.out.println(str.charAt(2));

//実行結果
に
```
---
### substringメソッド
このメソッドは、文字列から任意の文字列を抽出するメソッド。抽出する文字列を指定するために使う範囲は、次の図のように文字と文字の間に線を引き、番号を振ると分かりやすい。引数が1つの場合は、指定した引数以降が抽出される。
【文字列を抽出する際のイメージ】
![スクリーンショット 2023-06-05 22.51.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323261/67d45ff8-bae3-a51d-1d38-5f0a21236749.png)

メソッドの定義方法（引数が2つの場合）
```
String str = "abcde"
System.out.println(str.substring(2,4));

//実行結果
cd
```
メソッドの定義方法（引数が1つの場合）
```
String str = "abcde"
System.out.println(str.substring(3));

//実行結果
de
```
---
### replaceメソッド
このメソッドは、文字列を置き換えるためのメソッド。文字列の置き換えは先頭から始まり、文字列の最後まで行われる。このメソッドはオーバーロードされており、char型の引数を2つ受け取るものと、CharSequence型の引数を2つ受け取るものの２種類がある。char型かCharSequence型のうち、どちらか片方しか受け取らない。このような**2つの型が混在するオーバーロードは存在しない**。

メソッドの定義方法（char型）
```
String str = "aaaa";
System.out.println(str.replace("aa","b"));

//実行結果
bb
```

メソッドの定義方法（CharSequence型）
```
String str = "Hello World";
System.out.println(str.replace("World","Japan"));

//実行結果
Hello Japan
```
---
### startsWithメソッド
このメソッドは、文字列が引数で指定された文字で始まるかどうかを調べるためのメソッド。調べた結果は**真偽値**で戻される。

メソッドの定義方法
```
String str = "abc";
System.out.println(str.startsWith("a"));

//実行結果
true
```
---
### endsWithメソッド
このメソッドは、文字列が引数で指定された文字で終わっているかどうかを調べるメソッド。調べた結果は**真偽値**で戻される。

メソッドの定義方法
```
String str = "abc";
System.out.println(str.endsWith("c"));

//実行結果
true
```
---
### concatメソッド
このメソッドは、Stringクラスに用意されているメソッドの1つで、インスタンスが保持する文字列を、引数として渡された文字列と連結し、新しい文字列を戻すメソッド。+演算子による文字列連結と同じ効果があるが、違いは+演算子は a+b=abに対して、concatメソッドはa+b=cになる。appendメソッドと違い、**インスタンスを生成する**。

メソッドの定義方法
```
String str1 = "こんにちは";
String str2 = "おはよう";
System.out.println(str1.concat(str2));

//実行結果
こんにちはおはよう
```
---
### appendメソッド
このメソッドは、文字列に新しい文字列を追加するメソッド。追加された文字列は、既存の文字列も後ろに追加される。concatメソッドと違い、**インスタンスを生成しない**。

メソッドの定義方法
```
StringBuilder sb = new StringBuilder();
sb.append("SELECT * FROM employee");
sb.append("WHERE empno = ' ");
sb.append(emplo);
sb.append("';'");
System.out.println(sb);

//実行結果
SELECT * FROM employeeWHERE empno = ' emplo;
```
---
### reverseメソッド
このメソッドは、文字列を反転させるメソッド。

メソッドの定義方法
```
StringBuilder sb = new StringBuilder("abcde");
sb.reverce();
System.out.println(sb);

//実行結果
edcba
```
---
### internメソッド
このメソッドは、コンスタントプールを含むメモリ内の文字列を探して、再利用するメソッド。同じ文字列が存在しない場合は新たに文字列を生成する。

メソッドの定義方法
```
String str1 = new("def");
String str2 = new("def");
System.out.println(str1.intern() == str2.intern());

//実行結果
true
```