java 範囲を指定して配列をコピーする

java 範囲を指定して配列をコピーする

javaで、範囲を指定して配列をコピーする手順を記述してます。

環境

  • OS windows11 home
  • java 17.0.2

手順

範囲を指定して配列をコピーするには、「Arrays.copyOfRange」を使用します。

Arrays.copyOfRange( 配列 , 開始のインデックス番号,  終了のインデックス番号)
// 終了のインデックス番号の値はコピーされず、1つ前までコピーされます。

実際に、使用してみます。

import java.util.Arrays;

public class App {
    public static void main(String[] args) throws Exception {

        int[] a = {1, 2, 3, 4, 5};
        int[] b = Arrays.copyOfRange(a, 1,4);

        System.out.println(Arrays.toString(a)); // [1, 2, 3, 4, 5]
        System.out.println(Arrays.toString(b)); // [2, 3, 4]

    }
}

コピーされていることが確認できます。

範囲を超える

コピー時に範囲を超えると、0で埋められます。

import java.util.Arrays;

public class App {
    public static void main(String[] args) throws Exception {

        int[] a = {1, 2, 3, 4, 5};
        int[] b = Arrays.copyOfRange(a, 1,7);

        System.out.println(Arrays.toString(a)); // [1, 2, 3, 4, 5]
        System.out.println(Arrays.toString(b)); // [2, 3, 4, 5, 0, 0]

    }
}

マイナスを指定

マイナスを指定するとエラーとなります。

import java.util.Arrays;

public class App {
    public static void main(String[] args) throws Exception {

        int[] a = {1, 2, 3, 4, 5};
        int[] b = Arrays.copyOfRange(a, -1,3);

        // Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: arraycopy: source index -1 out of bounds for int[5]
        // at java.base/java.lang.System.arraycopy(Native Method)
        // at java.base/java.util.Arrays.copyOfRange(Arrays.java:3895)
        // at App.main(App.java:7)

    }
}