INTRODUCTION
Stringは「文字列」を扱うためのクラス
Javaで文字列を扱うときは、
String を使います。
String name = "山田";
String message = "こんにちは";
このように、 文字列を変数に入れて扱うことができます。
ただし、 Stringは単純に「文字を入れておく箱」 と考えるだけではありません。
Stringには、文字列を扱うためのさまざまな処理が用意されています。
まずは、 開発でよく使うところから見ていきます。
01
Stringを作る
一番基本的な書き方は、 文字列リテラルを使う方法です。
String name = "山田";
String language = "Java";
文字列は
" "
ダブルクォーテーションで囲みます。
例えば、
String str = "Hello";
であれば、
str に
"Hello" という文字列が入ります。
02
文字列を比較する
Stringで特に重要なのが、 文字列の比較です。
例えば、
String a = "Java";
String b = "Java";
この2つが同じ文字列か確認したいとします。
このとき、
if (a.equals(b)) {
System.out.println("同じ");
}
のように
equals()
を使います。
Stringの内容を比較するときは、
基本的に == ではなく
equals() を使います。
== は
「同じオブジェクトを参照しているか」
を確認するための演算子です。
一方、
a.equals(b)
は、 「文字列の内容が同じか」 を確認します。
03
文字列の長さを調べる
文字列の長さを取得するときは、
length()
を使います。
String str = "Java";
int length = str.length();
System.out.println(length);
結果は、
4
になります。
入力チェックなどでもよく使います。
if (name.length() == 0) {
System.out.println("名前が入力されていません");
}
04
文字列の一部を取り出す
実際の業務システムでは、 文字列の一部だけを取り出す処理もよくあります。
例えば、
String code = "ABC123456";
先頭から3文字を取り出したい場合は、
substring()
を使います。
String result = code.substring(0, 3);
System.out.println(result);
結果は、
ABC
です。
substring(開始位置, 終了位置)
開始位置は含まれますが、
終了位置は含まれません。
そのため、
substring(0, 3)
は、
0
1
2
の3文字を取得します。
05
文字列を変換する
Stringには、 文字列を変換するためのメソッドもあります。
大文字・小文字を変換する
String str = "Java";
System.out.println(
str.toUpperCase()
);
System.out.println(
str.toLowerCase()
);
結果は、
JAVA
java
となります。
前後の空白を取り除く
入力値などの前後に余計な空白が入っている場合は、
trim()
が使えます。
String name = " 山田 ";
String result = name.trim();
System.out.println(result);
ただし、
trim() は文字列の途中にある空白を削除するものではありません。
06
文字列を分割する
CSVのような文字列を扱う場合、 区切り文字で分割したくなることがあります。
String data = "001,山田,東京";
String[] values = data.split(",");
System.out.println(values[0]);
System.out.println(values[1]);
System.out.println(values[2]);
結果は、
001
山田
東京
となります。
split()
を使うと、
文字列を区切って配列として扱えます。
07
文字列を連結する
String同士をつなげる場合は、
+
が使えます。
String firstName = "山田";
String lastName = "太郎";
String name = firstName + lastName;
System.out.println(name);
結果は、
山田太郎
となります。
さらに、
String message =
"こんにちは、" + name + "さん";
のように、 文字列と変数を組み合わせることもできます。
08
StringBuilderを使う
Stringを
+
で何度も連結する処理では、
StringBuilder
が使われることがあります。
StringBuilder builder = new StringBuilder();
builder.append("Java");
builder.append("を");
builder.append("勉強する");
String result = builder.toString();
System.out.println(result);
結果は、
Javaを勉強する
です。
StringBuilderは、 文字列を組み立てながら内容を変更できるオブジェクトです。
特に、
ループの中で大量の文字列を連結するときなどに
StringBuilder
が候補になります。
09
実際の業務コードではどう使うのか
実際の業務システムでは、 Stringはさまざまな場面に登場します。
例えば、 APIから受け取った値をチェックしたり、
if (status.equals("SUCCESS")) {
// 正常処理
}
CSVの値を分割したり、
String[] values = line.split(",");
コードの一部を取り出したりします。
String code = value.substring(0, 3);
つまりStringは、 Javaの基本文法というだけではなく、 業務システムのあちこちで登場する型 です。
SMALL MEMO
Stringは少し特殊
ここまで分かれば、 Stringを使ううえでは十分です。
ただし、 Stringについて調べていると、 次のような言葉を見かけることがあります。
文字列リテラルを効率よく扱うために、
JVMが管理している領域です。
例えば、
String a = "Java";
String b = "Java";
のように同じ文字列リテラルを使った場合、 文字列を共有することがあります。
Stringは、 作成した文字列そのものを変更できません。
String str = "Java";
str = str + " Programming";
この場合、
元の "Java" が変更されたのではなく、
新しい文字列が作られています。
intern()
は、文字列をString Pool上の文字列として扱うための仕組みです。
String a = new String("Java");
String b = a.intern();
このあたりは、
Stringを使うために最初から覚える必要はありません。
まずは、
equals() で内容を比較する。
Stringはimmutableである。
StringBuilderは文字列を組み立てるときに使える。
この3つを押さえておけば十分です。
String Poolや
intern()、
JVM内部の文字列管理については、
必要になったときに詳しく見ていけば問題ありません。
FIELD NOTE
Stringを見たら、まず何を考える?
業務コードを読んでいると、 Stringの処理はかなり頻繁に出てきます。
そんなときは、 まず処理の目的を見ると分かりやすくなります。
equals()
→ 文字列を比較している
substring()
→ 文字列の一部を取り出している
split()
→ 区切って配列にしている
StringBuilder
→ 文字列を組み立てている
trim()
→ 前後の空白を処理している
「このStringは、何のために加工されているのか?」
という視点でコードを見ると、 単純な文字列処理でも意味が見えやすくなります。
SUMMARY
今回のポイント
Stringは、 Javaで文字列を扱うための基本的なクラスです。
equals()
→ 文字列の内容を比較する
length()
→ 文字列の長さを取得する
substring()
→ 文字列の一部を取り出す
split()
→ 文字列を分割する
StringBuilder
→ 文字列を組み立てる
そして、 Stringについて少し踏み込むと、
という仕組みがあります。
ただ、 最初からすべて覚える必要はありません。
まずは「文字列をどう比較し、どう加工するか」を理解する。
そのうえで、 実際のコードで必要になったときに Stringの内部的な仕組みを掘っていけば十分です。