Javaのlengthとは?文字列や配列の長さを取得するlengthの使い方
プログラミングにおいて「配列の長さ」や「文字列の長さ」といった表現で数を表すことがあります。そしてこれら「長さ」をプログラミングの中で利用することも多いです。今回は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()が定義されていないためエラーとなってしまうのです。
配列のlengthとStringのlength()の違いを理解していないと、初心者の方は混乱するポイントになりうるのでしっかりと理解しておきましょう。
4.まとめ
lengthとlength()の違いとそれぞれの使い方について見てきました。
フィールドとメソッドの違い、同じ長さを取るでも対象が違うことを理解すれば混乱することはなくなります。
本記事が理解への一助になれば幸いです。
コメント