Javaで文字列の長さや、配列の長さ(要素数)を取得する時に使用する、String.length()およびArray.length。
この記事では、開発の現場でもよく使う、この2つを解説します。
文字列の長さを取得する
まず、文字列(String)の長さを取得する、String.length()メソッドの使い方を解説します。
String.length()は、例えば文字数の長さをチェックする時になどに使用します。
String.length()メソッドで文字数を取得
String.length()メソッドの使い方は簡単で、使い方は以下の通りです。
文字列.length()
メソッドの戻り値には、int型の数値で文字数が返ります。
では、実際に動作するサンプルコードを作成してみましょう。
以下のサンプルコードでは、文字列が格納されたString型の変数から、length()メソッドで文字数を取得し、結果をコンソールに出力しています。
String str = "Hello Java"; System.out.println("文字数は" + str.length() + "です。" );
文字数とバイト数の違い
文字列を扱う場合、文字数とバイト数の違いを知っておく必要があります。
文字数は、String.length()で取得てきる値で、半角・全角関係なく1文字を1とカウントします。
それに対し、文字列をハードディスクや、データベースに格納する時のデータ量を表すのが「バイト数」です。バイト数は半角・全角の違いや、文字コードによって、同じ文字数でもバイト数が異なります。
以下は、「ハローJava」という文字列に対し、文字数と「Shift-JIS」および「UTF8」での文字コードでバイト数を求めるサンプルコードです。
import java.nio.charset.Charset; public class SampleClass { public static void main(String[] args) { // 文字数 System.out.println("文字数:" + "ハローJava".length()); // Shift-JISのバイト数 int byteCnt = "ハローJava".getBytes(Charset.forName("Shift_JIS")).length; System.out.println("Shift-JISのバイト数:" + byteCnt); // UTF-8のバイト数 byteCnt = "ハローJava".getBytes(Charset.forName("UTF-8")).length; System.out.println("UTF-8のバイト数:" + byteCnt); } }
【実行結果】
文字数:7 Shift-JISのバイト数:10 UTF-8のバイト数:13
Shift-JISでは全角文字が2バイト、UTF-8では3バイトになる為、同じ文字でも上の実行結果のように、バイト数が異なります。
改行も文字数に含まれる
String.length()で文字数を取得する時、文字列に改行が含まれていると、改行もコードも1文字としてカウントされます。
便利なサンプルコード
文字数を1文字ずつ取り出す
文字列の中から1文字ずつ取り出し、コンソールに出力するサンプルコードです。
public class Main { public static void main(String[] args) { String str = "ハローJava"; for (int i = 0; i < str.length(); i++) { System.out.println(str.substring(i, i + 1)); } } }
マルチバイト(全角)文字を含むかチェック
文字列の中に、マルチバイト(全角)文字が含まれるか簡単にチェックする方法を紹介します。
Shift-JISは、マルチバイト(全角)文字が2バイトになるため、文字数とバイト数を比較して、異なっていればマルチバイト(全角)文字が含まれていると判定できます。(下記、checkZenkaku()メソッド)
import java.nio.charset.Charset; public class Main { public static void main(String[] args) { if (checkZenkaku("全角123")) { System.out.println("全角文字が存在します。"); } } public static boolean checkZenkaku(String str) { int byteCnt = str.getBytes(Charset.forName("Shift_JIS")).length; int len = str.length(); return byteCnt != len; } }
【関連記事】
▶JavaのtoStringメソッドとは?便利な使い方を解説!
配列の長さ(要素数)を取得する
続いてら配列の長さを取得する方法を解説します。配列の長さ(要素数)は、Array.lengthフィールドから取得できます。
以下のサンプルコードは、int型の配列を作成して、その要素数をコンソールに出力する例です。
int[] intArray = new int[] {1, 2, 3}; System.out.println("要素数は" + intArray.length + "です");
便利なサンプルコード
Array.lengthフィールドを使用する便利なサンプルコードを紹介します。
配列の要素を1コずつ取り出す
lengthフィールドで取得した要素分、for文で繰り返し処理する、基本の配列処理です。
public class Main { public static void main(String[] args) { int[] ary = {10, 20, 30, 50}; for (int i = 0; i < ary.length; i++) { System.out.println(ary[i]); } } }
別の配列に要素をコピーする
コピー元の配列の各要素を、別の配列に一括でコピーする方法です。覚えておくと、配列を1コずつコピーするよりも、圧倒的にシンブルなコードで書けます。
public class Main { public static void main(String[] args) { int[] source = {1, 2, 3}; int[] copyArray = new int[3]; System.arraycopy(source, 0, copyArray, 0, source.length); } }
Listの長さを取得する方法
配列とは別に、Javaで複数の要素を持てるクラスとしてList型があります。
List型の長さを取得する時は、以下のサンプルコードのように、size()メソッドを使用します。
import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); System.out.println("Listの要素数:" + list.size()); } }
【関連記事】
▶【Java入門】ArrayListの使い方!配列との違いも解説
まとめ
Javaで文字列の長さを取得するString.length()と、配列の長さ(要素数)を取得するArray.lengthについて解説してきました。
よく使う処理なので覚えておいて損はないでしょう。
【関連記事】
▶【Java】ゼロから始めるJavaプログラミング!
List型には配列のようなlengthフィールドはありません。