Javaの文字列操作

Javaの文字列操作に関するメモ書きです

## 文字列調査

### equals
equalsメソッドは２つの値が等しいかを調べるメソッドです。
下記サンプルコードのように、２つの文字列が等しいか判定するのに利用します。

```java
public class Main {
  public static void main(String[] args) {
    String s1 = "iamcat";
    String s2 = "iamcat";
    String s3 = "IAmCat";
    if (s1.equals(s2)) {
      System.out.println("s1とs2は等しい");
    }
    // equalsは大文字と小文字を区別する
    if (s1.equals(s3)) {
      System.out.println("s1とs3は等しい");
    }
  }
}
```
実行結果
```java
s1とs2は等しい
```
数値の比較では ==演算子 を使用しますが、文字列の比較ではequalsを使用します。
なぜなら文字列のような参照型の場合、==演算子は同じオブジェクトを参照している場合にtrueを返すので、比較される２つの値が同じ文字列であっても別のオブジェクトだとfalseを返してしまうからです。
２つの文字列の値が等しいかを判定するにはequalsメソッドを使用するのが望ましいです。

### length

lengthメソッドは文字列の長さを調べるメソッドです。
lengthメソッドは全角文字も半角文字も１文字として数えます。

```java
public class Main {
  public static void main(String[] args) {
    String s1 = "iamcat";
    System.out.println(s1.length());
  }
}
```
実行結果
```java
6
```

### isEmpty

isEmptyメソッドは空文字かどうかを調べるメソッドです。
length() == 0 と同じ処理をします。
```java
public class Main {
  public static void main(String[] args) {
    String s1 = "iamcat";
    System.out.println(s1.isEmpty());
    String s2 = "";
    System.out.println(s2.isEmpty());
  }
}
```
実行結果
```java
false
true
```
## 文字列検索
### contains

containsメソッドは文字列の一部に引数で指定した文字列が含まれるか判定します。

```java
public class Main {
  public static void main(String[] args) {
      String s1 = "iamcat";
      System.out.println(s1.contains("amc"));
  }
}
```
実行結果
```java
true
```

### startsWith/endsWith

startsWithメソッドは引数で指定した文字列で始まるかを判定します。
一方、endsWithメソッドは引数で指定した文字列で終わるかを判定します。

```java
public class Main {
  public static void main(String[] args) {
      String s1 = "iamcat";
      System.out.println(s1.startsWith("i"));
      System.out.println(s1.endsWith("t"));
  }
}
```
実行結果
```java
true
true
```

### indexOf

indexOfメソッドは文字列が最初に登場する位置を返すメソッドです。
文字列の数え方は先頭を0文字目として数えます。

```java
public class Main {
  public static void main(String[] args) {
      String s1 = "iamcat";
      System.out.println(s1.indexOf("amc"));
  }
}
```
実行結果
```java
1
```
## 文字列切り出し
### charAt

charAtメソッドは指定位置の1文字を切り出して返します。
charAtも先頭を0文字目として数えます。

```java
public class Main {
  public static void main(String[] args) {
      String s1 = "iamcat";
      System.out.println(s1.charAt(4));
  }
}
```
実行結果
```java
a
```

### substring

substringメソッドは指定位置から始まる文字列を任意の長さだけ切り出します。
引数を1つだけ指定した場合、指定位置から後ろにある文字列が全て返されます。
引数を２つ指定した場合、２つの指定位置の間にある部分文字列が返されます。

```java
public class Main {
  public static void main(String[] args) {
     // 引数１つの場合
      String s1 = "iamcat";
      System.out.println(s1.substring(2));
      // 引数２つの場合
      System.out.println(s1.substring(2,4));
  }
}
```
実行結果
```java
mcat
mc
```
## 文字列置換
### toLowerCase/toUpperCase

toLowerCaseメソッドは大文字を小文字に変換します。
逆に、toUpperCaseメソッドは小文字を大文字を変換します。

```java
public class Main {
  public static void main(String[] args) {
      String s1 = "iamcat";
      System.out.println(s1.toUpperCase());
      String s2 = s1.toUpperCase();
      System.out.println(s2.toLowerCase());
  }
}
```
実行結果
```java
IAMCAT
iamcat
```

### trim

trimメソッドは文字列の前後の空白を削除します。
半角スペース、改行文字、タブを削除することができますが、全角スペースは削除できません。

```java
public class Main {
  public static void main(String[] args) {
      // 半角スペースを削除
      String s1 = "  iamcat  ";
      System.out.println(s1);
      System.out.println(s1.trim());
      // タブを削除
      String s2 = "\t iamcat";
      System.out.println(s2);
      System.out.println(s2.trim());
      // 改行文字を削除
      String s3 = "\n iamcat";
      System.out.println(s3);
      System.out.println(s3.trim());
  }
}
```
実行結果
```java
  iamcat  
iamcat
	 iamcat
iamcat

 iamcat
iamcat
```
## 文字列連結
### StringBuilder

StringBuilderメソッドは文字列同士を連結することができます。
+演算子でも文字列連結できますが、連結する数が多い場合、StringBuilderを使用したほうがパフォーマンスが良くなる場合が多いです。
↓参考
[[Java] Stringの結合について](https://qiita.com/yoshi389111/items/67354ba33f9271ef2c68 "[Java] Stringの結合について")
```java
public class Main {
  public static void main(String[] args) {
      // +演算子で連結
      String s1 = "iamcat" + "dog";
      System.out.println(s1);
      // stringBuilderで連結
      StringBuilder s2 = new StringBuilder();
      s2.append("iamcat");
      s2.append("dog");
      System.out.println(s2.toString());
  }
}
```
実行結果
```java
iamcatdog
iamcatdog
```