Javaの文字列操作

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

環境

11.0.16.1

文字列調査

equals

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

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は等しい");
    }
  }
}

実行結果

s1とs2は等しい

数値の比較では ==演算子 を使用しますが、文字列の比較ではequalsを使用します。 なぜなら文字列のような参照型の場合、==演算子は同じオブジェクトを参照している場合にtrueを返すので、比較される2つの値が同じ文字列であっても別のオブジェクトだとfalseを返してしまうからです。 2つの文字列の値が等しいかを判定するにはequalsメソッドを使用するのが望ましいです。

length

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

public class Main {
  public static void main(String[] args) {
    String s1 = "iamcat";
    System.out.println(s1.length());
  }
}

実行結果

6

isEmpty

isEmptyメソッドは空文字かどうかを調べるメソッドです。 length() == 0 と同じ処理をします。

public class Main {
  public static void main(String[] args) {
    String s1 = "iamcat";
    System.out.println(s1.isEmpty());
    String s2 = "";
    System.out.println(s2.isEmpty());
  }
}

実行結果

false
true

文字列検索

contains

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

public class Main {
  public static void main(String[] args) {
      String s1 = "iamcat";
      System.out.println(s1.contains("amc"));
  }
}

実行結果

true

startsWith/endsWith

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

public class Main {
  public static void main(String[] args) {
      String s1 = "iamcat";
      System.out.println(s1.startsWith("i"));
      System.out.println(s1.endsWith("t"));
  }
}

実行結果

true
true

indexOf

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

public class Main {
  public static void main(String[] args) {
      String s1 = "iamcat";
      System.out.println(s1.indexOf("amc"));
  }
}

実行結果

1

文字列切り出し

charAt

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

public class Main {
  public static void main(String[] args) {
      String s1 = "iamcat";
      System.out.println(s1.charAt(4));
  }
}

実行結果

a

substring

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

public class Main {
  public static void main(String[] args) {
     // 引数1つの場合
      String s1 = "iamcat";
      System.out.println(s1.substring(2));
      // 引数2つの場合
      System.out.println(s1.substring(2,4));
  }
}

実行結果

mcat
mc

文字列置換

toLowerCase/toUpperCase

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

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());
  }
}

実行結果

IAMCAT
iamcat

trim

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

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());
  }
}

実行結果

  iamcat  
iamcat
     iamcat
iamcat

 iamcat
iamcat

文字列連結

StringBuilder

StringBuilderメソッドは文字列同士を連結することができます。 +演算子でも文字列連結できますが、連結する数が多い場合、StringBuilderを使用したほうがパフォーマンスが良くなる場合が多いです。 ↓参考 [Java] Stringの結合について

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());
  }
}

実行結果

iamcatdog
iamcatdog