Javaの文字列(String)入門ガイド|初心者向けに基本操作をわかりやすく解説
「ひも」と聞くと、毛糸玉で遊ぶ猫を思い浮かべるかもしれません。確かに毛糸玉も「ひも」の一種ですが、プログラマーが使う「文字列(string)」という言葉は少し違った意味を持っています。
プログラミングにおける文字列とは、1つ以上の文字の並びのことです。テキストデータはコンピューターとの日常的なやり取りにおいて非常に重要な役割を果たしているため、文字列がプログラミングの根幹を支える要素であることも納得できるでしょう。
このガイドでは、Javaで文字列を作成する方法、文字列を連結する方法、変数に文字列を格納する方法などを解説します。実際のコード例を交えながら、初心者の方にもわかりやすく説明していきます。
Javaで文字列を作成する
Javaでは、文字列はテキストを格納するために使用されます。char型が1つの文字しか扱えないのに対し、文字列は好きなだけ多くの文字を保持できます。
文字列はダブルクォート(")で囲んで定義します。これは、シングルクォートとダブルクォートのどちらでも使えるPythonやJavaScriptとは異なる点です。以下はJavaにおける文字列の例です:
"This is an example string."
println()メソッドを使えば、文字列の内容を出力できます:
System.out.println("This is an example string.");
このコードを実行すると、「This is an example string」と出力されます。これで新しい文字列を作成できました。文字列の宣言方法がわかったところで、次はコード内で文字列を操作するさまざまな方法を見ていきましょう。
文字列の連結(Concatenation)
「連結」という言葉は少し難しく響きますが、意味はとてもシンプルです。2つの文字列を組み合わせて新しい文字列を作ることを指します。Javaでは+演算子(プラス記号)を使って文字列を連結できます。
例として、「William」と「Carter」という2つの文字列があるとしましょう。1つ目は名前、2つ目は苗字です。+演算子を使ってこれらを組み合わせてみます:
String fullname = "William" + "Carter"; System.out.println(fullname);
このコードの出力結果は「WilliamCarter」です。あれ、おかしいですね?なぜ2つの単語の間にスペースがないのでしょうか?
実は、連結された文字列の間にはデフォルトで空白が挿入されません。スペースを表示したい場合は、「William」の側に空白を追加する必要があります:
String fullname = "William " + "Carter"; System.out.println(fullname);
このプログラムを実行すると、今度は「William Carter」と正しく出力されます。
文字列の長さを求める
文字列の長さはどのように計算すればよいのでしょうか?幸いなことに、複雑な処理を自前で書く必要はありません。
Javaには文字列の長さを求めるための組み込みメソッドlength()が用意されています。その名の通り、まさに目的にぴったりなメソッドです!
ここでは、あるクラスにいる2人の生徒の名前の長さを計算するプログラムを作成してみましょう。新しいJavaファイルを作成し、以下のコードをメインクラスに貼り付けてください:
String name1 = "William Carter"; String name2 = "Helena Ohara"; int name1length = name1.length() - 1; int name2length = name2.length() - 1; System.out.println(name1 + "'s name is " + name1length + " letters long."); System.out.println(name2 + "'s name is " + name2length + " letters long.");
コードを実行すると、次のような結果が出力されます:
William Carter's name is 13 letters long. Helena Ohara's name is 11 letters long.
このプログラムでは、生徒の名前を格納する2つの変数(name1とname2)を定義し、length()メソッドでそれぞれの文字列の長さを計算しています。名前の中央にあるスペース1文字分を差し引くため、各長さから1を減算している点に注目してください。
その後、各名前の文字数を知らせるメッセージを出力しています。
文字列の中から特定の文字列を検索する
ある文字列の中から別の文字列を探したい場面はよくあります。そんなときに便利なのがindexOf()メソッドです。このメソッドは、指定した文字列が最初に出現する位置を返します。
仕組みを理解する前に、「インデックス(index)」について簡単に触れておきましょう。Javaでは、文字列はインデックス番号によって管理されています。つまり、文字列内のすべての文字に個別の番号が割り当てられ、その番号を使って各文字にアクセスできるのです。
文字列「William Carter」のインデックス構造は以下のようになっています:
| W | i | l | l | i | a | m | (空白) | C | a | r | t | e | r |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
注目すべきは、空白文字を含むすべての文字にインデックス番号が割り当てられている点です。また、カウントが0から始まっていることにも注意してください。Javaでは文字列のインデックスは0から始まるのがルールです。
それでは、この文字列の中で「Carter」がどこに現れるのか調べてみましょう。indexOf()メソッドを次のように使います:
String name = "William Carter";
int position = name.indexOf("Carter");
System.out.println("Carter appears starting at index value " + position);
このコードを実行すると、「Carter appears starting at index value 8」と出力されます。indexOf()は、指定した文字列が最初に出現するインデックス位置を返すのです。
2つの文字列が等しいかどうかを確認する
文字列の比較は、プログラミングにおいて非常によく登場する処理です。ログインフォームにパスワードを入力するときのことを考えてみてください。アプリケーションは何をしているのでしょうか?それは、入力されたパスワードと、データベースに保存されているパスワードを比較しているのです。
ここでは、ユーザーのパスワードが正しいかどうかをチェックするプログラムを書いてみましょう。新しいJavaファイルを作成し、以下のコードをメインプログラムに貼り付けてください:
String enteredPassword = "Test123";
String savedPassword = "Test12345";
boolean comparePasswords = enteredPassword.equals(savedPassword);
System.out.println("Does the entered password match the saved password? " + comparePasswords);
このコードを実行すると、次の結果が出力されます:
Does the entered password match the saved password? false
このプログラムは、指定した2つの文字列enteredPasswordとsavedPasswordが等しいかどうかをチェックしています。この確認にはequals()メソッドを使用します。文字列が等しければtrueを、そうでなければfalseを返します。
なお、Javaでは変数名にsnake_caseではなくcamelCase(単語の先頭を大文字にする命名規則)を使うのが一般的なので、ここでもその慣習に従っています。
次に、enteredPasswordの値をsavedPasswordと同じになるように変更してみましょう:
String enteredPassword = "Test12345"; String savedPassword = "Test12345"; ...
このコードを実行すると、プログラムは次の結果を返します:
Does the entered password match the saved password? true
両方の文字列が一致しているため、equals()メソッドはtrueと評価されました。
特殊文字(エスケープシーケンス)の扱い方
文字列はダブルクォートで囲んで記述する必要があります。これは大したことないように思えますが、文字列の中にダブルクォート自体を含めたい場合には問題になります。そのまま書くとエラーが発生してしまうのです。
このエラーを解決するには、バックスラッシュ(\)文字を使用します。バックスラッシュを付けると、直後の文字が特殊文字として扱われます。次の例を見てみましょう:
String statement = "Your order for \"Chocolate Chip Cookie x2\" was processed.";
この文字列は、各ダブルクォートの前にバックスラッシュを指定しているため、プログラム上で正しく動作します。出力結果は次のとおりです:「Your order for Chocolate Chip Cookie x2 was processed.」
しかし、今度は別の疑問が浮かびました。文字列の中でバックスラッシュ自体を使いたい場合はどうすればよいのでしょうか?その場合は、バックスラッシュを2つ並べて記述します:
String orderReference = "Your order reference is 202\\303."
これにより、「Your order reference is 202\303.」という文字列が出力されます。
Javaで使用できる特殊文字は他にも多数あります。その中でも特に便利なのが「\n」(改行)です。この文字を使うと、文字列内で改行を挿入できます:
String orderReference = "Your order reference is: \n 202\\303."
この文字列は次のように表示されます:
Your order reference is:
202\303
「is:」の部分の後に改行文字を指定したため、文字列が2行に分割されて表示されています。
まとめ
文字列を使えば、プログラム内でテキストデータを自由に扱えるようになります。文字列は任意の数の文字を保持でき、文字数ゼロの空の文字列を作ることも可能です。
indexOf()やequals()といった文字列メソッドを活用することで、Javaで文字列の内容を柔軟に操作できます。これであなたも、プロのようにJavaの文字列を扱う準備が整いました!
-
【Java】文字列から特定の単語を検索する3つの方法|contains()・indexOf()・StringTokenizerの使い方
Javaには、文字列の中から特定の単語を検索・解析するためのさまざまな手法が用意されています。この記事では、特によく使われる以下の3つの方法を、サンプルコードと実行結果とあわせてわかりやすく解説します。 contains()メソッド … 単語が含まれているかどうかを判定 indexOf()メソッド … 単語が出現する位置(インデックス)を取得 StringTokenizerクラス … 文字列を単語に分割し、完全一致で比較 1. contains()メソッド Stringクラスのcontains()メソッドは、引数として渡した文字シーケンス(CharSequence)が現在の文字列内に含まれ
-
Javaで文字列がアルファベットのみか判定する方法【2つの手法を解説】
Javaで文字列がアルファベット(英字)のみで構成されているかを検証するには、大きく分けて2つの方法があります。1つは、文字列内の各文字を英字(大文字・小文字)と1つずつ比較する方法、もう1つは正規表現を使う方法です。 方法1:各文字を1つずつ比較して検証する 次のプログラムは、ユーザーから文字列(名前)を入力として受け取り、含まれる各文字が英字(a〜z、A〜Z)の範囲内にあるかを順番にチェックすることで、入力が適切な名前かどうかを判定します。 import java.util.Scanner; public class ValidatingString { public static