Javaで文字列や配列の「長さ」を取得するには2つのlengthを使い分けよう

Javaで文字列や配列の「長さ」を取得するには2つのlengthを使い分けよう

のかな

開発エンジニア/Java4年/ボールド歴4年

プログラミングにおいて「配列の長さ」や「文字列の長さ」といった表現で数を表すことがあります。そしてこれら「長さ」をプログラミングの中で利用することも多いです。今回はJavaの「長さ」=lengthについて解説していきたいと思います。

就活生向け特設ページ

1.lengthとlength()

Javaには2つのlengthがあります。

ひとつは配列の長さ(要素数)を取得するための「length」、もうひとつは文字列の長さ(文字数)を取得するための「length()」です。

2つの違いは、見た目では()がつくか否かです。それぞれの意味合いの違いとしては、配列の長さを取得するlengthは配列が持つフィールドで、length()String型で定義されているメソッドであるということです。

名前種類用途
lengthフィールド配列の要素数を持つ
length()メソッドStringクラスで定義されている。文字列の文字数をint型で返す

2.lengthは配列の要素数を取得する

2-1.lengthの使い方

まずは配列の要素数を取り出すlengthの使い方を見ていきましょう。

String strs[] = {"ひとつ", "ふたつ", "みっつ", "よっつ"};
System.out.println(strs.length);

これを実行した結果は以下となります。


4

配列の要素数は4です。lengthで要素数が取得できましたね。

もうひとつ、次の場合はどうなるでしょうか。

String strs[] = new String[2];
System.out.println(strs.length);

配列を初期化しただけで各要素には何も入っていない状態(null)ですがこれを実行すると結果は2となります。

strs[0]やstrs[1]nullですが、要素数としてはカウントされていることがわかりますね。要素の中身がnullであっても要素数には含まれる点を覚えておきましょう。

また次のような場合はコンパイルエラーとなりますので注意しましょう

String strs[] = {"ひとつ", "ふたつ", "みっつ"};
System.out.println(strs[0].length);

lengthは配列が持つフィールドですので、strs[0]の中身であるString型の要素からは取得できません。String型ではlengthというフィールドは定義されていないからです。

2-2.二次元配列でlengthを使う

しかしstrs[i].lengthという書き方が絶対にできないかというとそんなことはありません。それができるのは二次元配列の要素数を取得する場合です。※二次元配列とは、要素に配列を持つ配列のことです。これに対して通常の配列は一次元配列といいます。

二次元配列についてよくわからない人は本項を読み飛ばしていただいて構いません。ここで書いていることを理解するのは二次元配列を知ってからで問題ないです。

String strs[][] = {
			{"1-1","1-2"},
			{"2-1","2-2","2-3"},
			{"3-1","3-2","3-3","3-4"}
			};
System.out.println("strsの長さ:" + strs.length);
System.out.println("strs[0]の長さ:" + strs[0].length);
System.out.println("strs[1]の長さ:" + strs[1].length);
System.out.println("strs[2]の長さ:" + strs[2].length);

結果は以下のとおりです。

strsの長さ:3

strs[0]の長さ:2

strs[1]の長さ:3

strs[2]の長さ:4

まず配列strs自身の長さは3つの要素が格納されているので3が出力されています。そして各要素も配列なのでそれぞれがlengthフィールドを持っています。そのため、各要素にアクセスしてlengthによる要素数の取得を行うことができるのです。これがstrs[i].lengthという書き方ができる例です。あくまで配列の要素数を取得するために使っていることがポイントです。

2-3.For文でlengthを使うと便利

ここまでlengthの基本的な使い方を見てきましたが、次はもう少し具体的な使い方としてFor文と組み合わせる方法をご紹介します。

まずはこちらをご覧ください。

String strs[] = {"ひとつ", "ふたつ", "みっつ"};

for(int i = 0; i < 3; i++) {
	System.out.println(strs[i]);
}

配列の要素をひとつずつ取り出してすべての要素を出力させていますので以下のような結果となります。

ひとつ

ふたつ

みっつ

ただこのFor文、繰り返し条件として「i < 3」と直接数字を指定しています。

配列の要素数が必ず3であればこれでも問題はないですが、要素数が変わる可能性がある場合はマズいことになります。配列の要素数が3より多くて全要素が出力されず期待した結果が得られないのはまだマシで、配列の要素数が3未満の場合は例外が発生してしまいます。

そんな場合はlengthの出番です。以下のように繰り返し条件を書き換えてみましょう。

String strs[] = {"ひとつ", "ふたつ", "みっつ"};

for(int i = 0; i < strs.length; i++) {
	System.out.println(strs[i]);
}

結果は先ほどのコードと同様です。しかしこちらは繰り返し条件を「i < strs.length」としたことで配列の要素数が比較対象となりどんな長さの配列でも対応できるFor文になりました。

以上が配列の要素数を取得するlengthの使い方でした!


3.length()は文字列の文字数を取得する

3-1.length()の使い方

    length()はStringクラスで定義されているメソッドで戻り値はint型で文字列の文字数を返します。ということで、さっそく使い方を見ていきましょう。

    String str = "文字列を返すmethod";
    System.out.println(str.length());
    

    実行した結果は12です。全角も半角も同様に1文字として扱われ「文字数」を返していますね。また、改行コードなども同様に文字数として扱われますので覚えておきましょう。

    3-2.配列でlength()を使う

    次にlength()を配列で使おうとするとどうなるかを見てみましょう。

    String strs[] = {"ひとつ", "ふたつ", "みっつ", "よっつ"};
    System.out.println(strs[0].length());
    

    実行結果は3が出力されます。Str[0]にはString型の要素であるひとつが入っていて、length()String型の要素の文字数を返しています。Stringだからといって次のようにするとコンパイルエラーとなります。

    String strs[] = {"ひとつ", "ふたつ", "みっつ"};
    System.out.println(strs.length());
    

    配列であるString[]ではlength()が定義されていないためエラーとなってしまうのです。

    配列のlengthStringlength()の違いを理解していないと、初心者の方は混乱するポイントになりうるのでしっかりと理解しておきましょう。


    4.まとめ

    lengthとlength()の違いとそれぞれの使い方について見てきました。

    フィールドとメソッドの違い、同じ長さを取るでも対象が違うことを理解すれば混乱することはなくなります。

    本記事が理解への一助になれば幸いです。

    私たちは、全てのエンジニアに市場価値を高め自身の望む理想のキャリアを歩んでいただきたいと考えています。もし、今あなたが転職を検討しているのであればこちらの記事をご一読ください。理想のキャリアを実現するためのヒントが見つかるはずです。

    『技術力』と『人間力』を高め市場価値の高いエンジニアを目指しませんか?

    私たちは「技術力」だけでなく「人間力」の向上をもって遙かに高い水準の成果を出し、関わる全ての人々に感動を与え続ける集団でありたいと考えています。

    高い水準で仕事を進めていただくためにも、弊社では次のような環境を用意しています。

    • 定年までIT業界で働くためのスキル(技術力、人間力)が身につく支援
    • 「給与が上がらない」を解消する6ヶ月に1度の明確な人事評価制度
    • 平均残業時間17時間!毎週の稼動確認を徹底しているから実現できる働きやすい環境

    現在、株式会社ボールドでは「キャリア採用」のエントリーを受付中です。

    まずは以下のボタンより弊社の紹介をご覧いただき、あなたの望むキャリアビジョンをエントリーフォームより詳しくお聞かせください。

    コメント

    文系IT未経験歓迎!株式会社ボールドの 採用エントリー を受付中!
    文系IT未経験歓迎!
    株式会社ボールドの 採用エントリー を受付中!