JavaのcharAt()メソッド徹底ガイド!文字列から任意の位置の文字を取得する方法
JavaのcharAt()メソッドは、文字列内の指定したインデックス位置にある1文字を返します。文字列の最初の文字はインデックス0に対応しており、charAt()が返すのは常に単一の文字であり、複数の文字範囲ではない点に注意しましょう。
Javaで文字列を扱っていると、「この文字列の何番目にはどんな文字があるのだろう?」と知りたくなる場面があります。
そんなときに役立つのがcharAt()メソッドです。JavaのcharAt()メソッドを使うと、文字列内の指定した位置に対応する文字を簡単に取得できます。
例えば、アメリカの電話番号の市外局番から地域情報を取得するプログラムを作るとしましょう。電話番号が格納された文字列から、先頭の3文字を取り出したい場面が出てきます。
本記事では、具体的なコード例とともに、JavaでcharAt()を使う方法をわかりやすく解説します。
おさらい:Javaの文字列(String)の基本
文字列は、あらゆるプログラミング言語において重要なデータ型です。テキストデータをコード上で扱うための仕組みだからです。Javaでは、文字列はダブルクォーテーション("")で囲んで表現します。以下は、Javaで文字列を宣言する例です。
String company = "Google";
上記で定義した変数companyは、次のようなインデックス値を持ちます。
| G | o | o | g | l | e |
| 0 | 1 | 2 | 3 | 4 | 5 |
最初の文字「G」のインデックスは0、そして5番目の文字「l」のインデックスは4となります。このように、Javaの文字列のインデックスは0から始まる点がポイントです。
Java charAt()メソッドの基本構文
Javaに組み込まれているStringクラスのcharAt()メソッドは、文字列内の特定のインデックス位置にある文字を返します。最初の文字のインデックス値は0で、以降の文字も順に1、2、3…と続いていきます。
例えば、文字列の1番目の文字や9番目の文字を取得したい場合に、charAt()が活躍します。charAt()メソッドの構文は以下の通りです。
char result = string_name.charAt(index);
charAt()が受け取る引数は1つだけです。それは、取得したい文字のインデックス位置です。
charAt()の実践例:名前の頭文字を取得する
ここで、コーヒーショップを経営していると仮定しましょう。売上アップと来店者数の増加を目的としたプロモーションの一環として、名前が「G」で始まるお客様全員に5%の割引を提供することにしました。
そこで、バリスタが入力した名前の頭文字を取得するプログラムを作成することにします。以下のコードで実現できます。
public class GetFirstLetter {
public static void main (String[] args) {
String name = "GRAHAM HENDERSON";
char letter = name.charAt(0);
System.out.println("The first letter of " + name + "'s name is " + letter + ".");
}
}このコードを実行すると、プログラムは次の出力を返します。
The first letter of GRAHAM HENDERSON's name is G.
まず、コードを格納するためのGetFirstLetterというクラスを作成します。次に、顧客の名前を保存するnameという変数を定義しました。今回は顧客の名前が「Graham Henderson」であるとします。名前の読み間違いを防ぐため、顧客名はすべて大文字で記録することにしました。
その次の行では、letterという変数を定義しています。letter変数には1文字だけが格納されるため、データ型には「char」を使用しました。
この変数にはname.charAt(0)の結果が代入されます。これは文字列の最初の文字、つまりインデックス値0の文字を取得することを意味します。今回の場合、charAt()メソッドは文字「G」を返しました。
最後に、指定したインデックス位置の文字をコンソールに出力する処理を行っています。
別の文字を取得する方法
文字列の2番目の文字を取得したい場合は、コードを次のように変更します。
...
String name = "GRAHAM HENDERSON";
char letter = name.charAt(1);
System.out.println("The second letter of " + name + "'s name is " + letter + ".");
...変更した箇所は2つあります。1つ目は、charAt()メソッドのインデックス番号を1に変更した点です。これにより、文字列の2番目の文字を指すことになります。2つ目は、出力メッセージを「The first letter of…」から「The second letter of…」に変更した点です。
このコードを実行すると「R」が出力されます。charAt()は新しい文字を返すだけであり、元の文字列自体は一切変更されない点にも注目してください。
このように、コードによって文字列の2番目の文字を正しく取得できました。
応用例:charAt()で文字の出現回数をカウントする
charAt()メソッドの便利な活用例のひとつが、出現回数カウントアルゴリズムです。出現回数カウントアルゴリズムとは、特定の値が文字列やリストなどの反復可能なオブジェクトの中に何回現れるかを数える手法のことです。
再びコーヒーショップの話に戻りましょう。「G」という頭文字を持つ名前があまりに多いため、割引を請求する顧客が多くなりすぎてしまったとします。そこで条件を変更し、名前に「G」が2つ以上含まれる場合にのみ、購入額の5%割引を受けられるようにすることにしました。
顧客が割引の対象かどうかを判定するために使えるコードがこちらです。
class GetLetters {
public static void main (String[] args) {
String name = "GRAHAM HENDERSON";
int counter = 0;
for (int i = 0; i <= name.length() - 1; i++) {
if (name.charAt(i) == 'G') {
counter++;
}
}
System.out.println(name + "'s" + " name contains " + counter + " G.");
}
}このコードを実行すると、プログラムは次の出力を返します。
GRAHAM HENDERSON's name contains 1 G.
まず、プログラムのコードを格納するGetLettersというクラスを定義します。続いて、顧客の名前を保存するnameという変数を定義しました。
さらに、文字列の中に文字「G」がいくつあるかを記録するcounterという変数を定義し、name変数の各文字を順番に調べるforループを作成しました。
ループ条件のname.length() - 1により、ループはname文字列のすべての文字を通過し終えるまで繰り返されます。
次に、if文を定義しています。このif文は、forループが実行されるたびに増加するインデックスiの位置にある文字が「G」と等しいかどうかをチェックします。
なお、この比較は大文字・小文字が区別される点に注意が必要です。もし名前が小文字で記録されていた場合、name.charAt(i) == 'G'という条件は決してtrueにならず、カウントされません。
インデックス位置iの文字が「G」と等しければ、counterが1ずつ加算されます。コードの最終行では、顧客の名前に文字「G」が何回現れたかをコンソールに出力するよう指示しています。
まとめ
JavaのcharAt()メソッドは、文字列内の特定のインデックス位置に存在する文字を取得するためのメソッドです。例えば、文字列の10番目や15番目の文字を取り出したいときなどに使用できます。
本記事では、JavaでcharAt()メソッドを使う方法を解説しました。charAt()メソッドの使用例を段階的に確認するとともに、Javaの出現回数カウントアルゴリズムでcharAt()を活用する方法についても触れました。
これで、あなたもプロのようにcharAt()を使いこなせるはずです!Javaについてさらに学びたい方は、ぜひ当サイトのJavaプログラミングガイドも参考にしてみてください。
-
Javaコンパイラ入門:仕組みの解説と初心者におすすめのオンラインIDE
5〜10年前、Javaを学ぶのは今ほど手軽なことではありませんでした。当時は、コンパイラとインタプリタを含むJava Development Kit(JDK)をダウンロードし、自分のマシン上で実行環境を整える必要がありました。しかし現在では、無料で利用できるJavaコンパイラがオンライン上に数多く存在します。この記事では、Java言語のコンパイルの仕組みと、練習やプロジェクト作成に活用できるオンラインツールについて詳しく解説します。 Javaプログラムはどのように実行されるのか? Javaは完全なコンパイル型言語ではありません。しかし、かといって完全なインタプリタ型言語でもありません。 ここ
-
JavaのStringIndexOutOfBoundsExceptionとは?発生原因と対処法をわかりやすく解説
StringIndexOutOfBoundsExceptionとはJavaにおいて、文字列(String)は一連の文字を格納するために使用され、オブジェクトとして扱われます。文字列は、java.langパッケージに含まれるStringクラスによって表現されます。文字列の作成方法は主に2つあります。1つは他のオブジェクトと同様にnewキーワードを使用する方法、もう1つはプリミティブ型のようにリテラルを直接代入する方法です。String stringObject = new String(Hello how are you); String stringLiteral = Welcome to T