Java入門|文字列の長さと文字を取り出す方法

文字列の中身を見られるようになると、Javaの処理はもっと細かく、もっと便利になる

Javaで文字列を扱うようになると、ただ文章を表示するだけではなく、その中の何文字目に何が入っているのかを調べたり、全部で何文字あるのかを数えたりしたくなる場面が増えてきます。たとえば、名前の最初の文字を取り出したいときや、入力された言葉の長さを確認したいときなどです。こうした処理は、実際のプログラムでもとてもよく使われます。

そこで役立つのが、Stringクラスの charAt() メソッドと length() メソッドです。charAt() を使うと、文字列の中の指定した位置にある文字を取り出せます。length() を使うと、その文字列が何文字あるかを調べられます。どちらもStringクラスを学ぶうえで最初に覚えたい基本機能です。

ここでは、文字列の長さを調べる方法と、文字を1文字ずつ取り出す方法について、やさしく整理しながら見ていきます。さらに、Stringオブジェクトの作り方にも少し触れながら、なぜ文字列が特別に扱いやすくなっているのかもいっしょに確認していきましょう。

文字列の長さと文字を取り出すとはどういうことか

文字列というのは、文字が順番に並んだデータです。たとえば、さくら という文字列なら、さ、く、ら という3つの文字が並んでできています。

このとき、次のようなことが分かると便利です。

調べたいこと
何文字あるかさくら は 3文字
最初の文字は何か
2文字目は何か
最後の文字は何か

Stringクラスには、こうした確認を行うためのメソッドが用意されています。今回はその中でも特に基本となる charAt() と length() に注目します。

charAt() メソッドの役割

charAt() メソッドは、指定した位置にある1文字を取り出すためのメソッドです。

書き方は次の形です。

文字列変数.charAt(位置)

このメソッドに数字を渡すと、その位置にある文字が返されます。戻り値の型は char です。つまり、1文字を表す型です。

たとえば、Java という文字列なら、次のような位置関係になります。

位置文字
0J
1a
2v
3a

このため、charAt(0) は J を返し、charAt(1) は a を返します。

ここで大切なのは、文字の位置を 0 から数える という点です。1文字目だから 1 ではなく、最初の文字は 0 です。これはJavaだけでなく、多くのプログラミング言語で共通する考え方です。

length() メソッドの役割

length() メソッドは、文字列に含まれている文字数を返すメソッドです。

書き方は次のようになります。

文字列変数.length()

たとえば、Java という文字列に対して length() を使うと、4 が返ります。

これにより、文字列が何文字あるかを簡単に調べられます。入力チェックや文字数制限のある処理では、とてもよく使われます。

シンプルなプログラムで確認してみよう

ファイル名:Sample1.java

class Sample1
{
    public static void main(String[] args)
    {
        // 文字列を用意する
        String str = "さくら";

        // 1文字目と2文字目を取り出す
        char ch1 = str.charAt(0);
        char ch2 = str.charAt(1);

        // 文字列の長さを調べる
        int len = str.length();

        // 結果を表示する
        System.out.println(str + "の1文字目は" + ch1 + "です。");
        System.out.println(str + "の2文字目は" + ch2 + "です。");
        System.out.println(str + "の文字数は" + len + "です。");
    }
}

このプログラムでは、文字列 さくら を用意し、その1文字目と2文字目を取り出し、さらに全体の文字数も調べています。

実行結果の例は次のようになります。

さくらの1文字目はさです。
さくらの2文字目はくです。
さくらの文字数は3です。

とてもシンプルですが、Stringクラスの基本的な使い方がしっかり詰まっています。

プログラムの流れを順番に見てみよう

このプログラムで行っていることを、順番に整理すると次のようになります。

順番処理内容説明
1String str = "さくら";文字列を用意する
2str.charAt(0)先頭の文字を取り出す
3str.charAt(1)2文字目を取り出す
4str.length()文字数を調べる
5System.out.println(...)結果を表示する

このように、まず文字列を準備し、その文字列に対してメソッドを呼び出している流れになっています。

charAt() は指定位置の文字を返す

charAt() の一番大切なポイントは、指定した位置の文字を返すということです。

先ほどの例で使った さくら を位置つきで見ると、次のようになります。

位置文字
0
1
2

この表を見ると、

  • charAt(0) は さ
  • charAt(1) は く
  • charAt(2) は ら

となることがよく分かります。

つまり、charAt() は文字列の中から特定の1文字だけを取り出したいときに使うメソッドです。たとえば、名前の最初の文字だけを表示したい場合や、特定位置の文字を判定したい場合に役立ちます。

0から数えることに注意しよう

ここは初心者の方がつまずきやすいところなので、少し丁寧に整理しておきます。

私たちが日常で「1文字目」「2文字目」と数えるときは、普通は1から始めます。でも、Javaの文字列では位置を0から数えます。

そのため、次のように対応します。

普段の言い方Javaでの位置
1文字目0
2文字目1
3文字目2

この考え方に慣れていないと、charAt(1) を使ったときに最初の文字が出ると思ってしまうことがあります。ですが、実際には2文字目が返ります。

ここは何度も使って慣れるのが一番です。

length() は文字列全体の長さを返す

length() は、文字列の中に何文字あるかを数えて返してくれます。

たとえば、

String str = "さくら";
int len = str.length();

とすると、len には 3 が入ります。

このように、length() は文字列のサイズを知りたいときに使います。

特に次のような場面で便利です。

場面使い方の例
入力された名前が空でないか確認するlength() が 0 かどうかを見る
パスワードが短すぎないか確認する文字数をチェックする
文字列の最後の位置を知りたいlength() を参考にする

文字列を扱うプログラムでは、長さを知る処理は本当によく出てきます。

charAt() と length() の違いを整理しよう

この2つはどちらも文字列を調べるメソッドですが、役割はかなり違います。

メソッド戻り値役割
charAt(位置)char指定位置の1文字を返す
length()int文字列全体の文字数を返す

つまり、

  • charAt() は どの文字か を調べる
  • length() は 何文字あるか を調べる

という違いがあります。

この2つをセットで覚えておくと、文字列の基本操作がかなりやりやすくなります。

この図は、文字列 さくら のそれぞれの文字に位置番号が対応していることを表しています。0 が さ、1 が く、2 が ら に対応しているので、charAt(0) や charAt(1) の意味が視覚的に理解しやすくなります。

また、length() は文字列全体に対して働き、全部で3文字あることを返すという点も図にするとよく伝わります。charAt() が一部分を見るメソッドで、length() が全体を見るメソッドだと考えると整理しやすいです。

文字列オブジェクトの作り方にも注目しよう

ここで、文字列の作り方についても確認しておきましょう。

今回のプログラムでは、次のように書いていました。

String str = "さくら";

この書き方では、new を使っていません。それでも、Stringクラスのオブジェクトを扱えています。

これは、Stringクラスがとてもよく使われる特別なクラスだからです。文字列リテラルと呼ばれる " " で囲まれた書き方だけで、文字列オブジェクトを表せるようになっています。

このため、文字列を作るときには次のようにシンプルに書くのが一般的です。

String str = "こんにちは";

new を使った書き方もある

もちろん、これまで学んだオブジェクト作成の形で書くこともできます。

String str = new String("こんにちは");

この書き方も文法的には間違いではありません。ただし、普段のJavaプログラムでは、わざわざ new String(...) と書かず、文字列リテラルをそのまま使うことがほとんどです。

理由を整理すると次のようになります。

書き方特徴
String str = "こんにちは";短くて分かりやすい
String str = new String("こんにちは");書けるが、普段はあまり使わない

つまり、Stringクラスはよく使うからこそ、より簡単に扱えるようになっているのです。

なぜ文字列リテラルの書き方がよく使われるのか

文字列リテラルの書き方がよく使われる理由は、とてもシンプルです。

  • 書き方が短い
  • 読みやすい
  • 無駄が少ない
  • Javaでは一般的な書き方である

特に学習の初期段階では、余計な書き方を増やさず、まずは分かりやすい形でコードに慣れることが大切です。その意味でも、String str = "文字列"; という書き方を自然に使えるようになっておくと安心です。

実務や学習でどう役立つのか

charAt() と length() は、シンプルですが本当に出番の多いメソッドです。

たとえば、次のような場面で役立ちます。

場面使い方
名前の最初の文字を表示するcharAt(0) を使う
商品コードの先頭文字を確認するcharAt(0) で判定する
入力文字数の制限を確認するlength() で調べる
最後の文字を調べるlength() と組み合わせて使う

たとえば、最後の文字を調べたいときには、length() で長さを調べ、その長さから1を引いた位置を charAt() に渡すという考え方もできます。こうした使い方は、今後の文字列操作の基礎になります。

よくある注意点

最後に、charAt() と length() を使うときの注意点を整理しておきます。

注意点内容
位置は0から始まる1文字目は0、2文字目は1
charAt() は1文字だけ返す戻り値は char
length() は文字数を返す戻り値は int
String は文字列リテラルで作れるnew を使わなくてもよい

このあたりを押さえておくと、Stringクラスの学習がかなりスムーズになります。

文字列はJavaプログラムの中でとてもよく使われます。その中でも、長さを調べる、指定位置の文字を取り出すという操作は、最初にしっかり身につけておきたい基本です。ここをきちんと理解しておくと、この先に学ぶ substring() や indexOf() などのメソッドも、ずっと理解しやすくなります。