splice什么意思 java_JavaScript方法中“ splice(a,b,…)”的Java等价方法

小编典典

这是Array.prototype.splice()根据JavaScript

MDN规范的方法的Java实现。

public static T[] splice(final T[] array, int start) {

if (start < 0)

start += array.length;

return splice(array, start, array.length - start);

}

@SuppressWarnings("unchecked")

public static T[] splice(final T[] array, int start, final int deleteCount) {

if (start < 0)

start += array.length;

final T[] spliced = (T[])Array.newInstance(array.getClass().getComponentType(), array.length - deleteCount);

if (start != 0)

System.arraycopy(array, 0, spliced, 0, start);

if (start + deleteCount != array.length)

System.arraycopy(array, start + deleteCount, spliced, start, array.length - start - deleteCount);

return spliced;

}

@SuppressWarnings("unchecked")

public static T[] splice(final T[] array, int start, final int deleteCount, final T ... items) {

if (start < 0)

start += array.length;

final T[] spliced = (T[])Array.newInstance(array.getClass().getComponentType(), array.length - deleteCount + items.length);

if (start != 0)

System.arraycopy(array, 0, spliced, 0, start);

if (items.length > 0)

System.arraycopy(items, 0, spliced, start, items.length);

if (start + deleteCount != array.length)

System.arraycopy(array, start + deleteCount, spliced, start + items.length, array.length - start - deleteCount);

return spliced;

}

以下JUnit代码测试了此实现:

@Test

public void testSplice() {

final String[] array = new String[] {"a", "b", "c", "d", "e", "f"};

Assert.assertArrayEquals(new String[] {"c", "d", "e", "f"}, Arrays.splice(array, 0, 2));

Assert.assertArrayEquals(new String[] {"a", "d", "e", "f"}, Arrays.splice(array, 1, 2));

Assert.assertArrayEquals(new String[] {"a", "b", "e", "f"}, Arrays.splice(array, 2, 2));

Assert.assertArrayEquals(new String[] {"a", "b", "c", "f"}, Arrays.splice(array, 3, 2));

Assert.assertArrayEquals(new String[] {"a", "b", "c", "d"}, Arrays.splice(array, 4, 2));

try {

Arrays.splice(array, 5, 2);

Assert.fail("Expected ArrayIndexOutOfBoundsException");

}

catch (final ArrayIndexOutOfBoundsException e) {

}

try {

Arrays.splice(array, -2, 3);

Assert.fail("Expected ArrayIndexOutOfBoundsException");

}

catch (final ArrayIndexOutOfBoundsException e) {

}

Assert.assertArrayEquals(new String[] {"a", "b", "c", "d"}, Arrays.splice(array, -2, 2));

Assert.assertArrayEquals(new String[] {"a", "b", "c", "f"}, Arrays.splice(array, -3, 2));

Assert.assertArrayEquals(new String[] {"a", "b", "e", "f"}, Arrays.splice(array, -4, 2));

Assert.assertArrayEquals(new String[] {"a", "d", "e", "f"}, Arrays.splice(array, -5, 2));

Assert.assertArrayEquals(new String[] {"c", "d", "e", "f"}, Arrays.splice(array, -6, 2));

try {

Arrays.splice(array, -7, 2);

Assert.fail("Expected ArrayIndexOutOfBoundsException");

}

catch (final ArrayIndexOutOfBoundsException e) {

}

Assert.assertArrayEquals(new String[] {}, Arrays.splice(array, 0));

Assert.assertArrayEquals(new String[] {"a"}, Arrays.splice(array, 1));

Assert.assertArrayEquals(new String[] {"a", "b"}, Arrays.splice(array, 2));

Assert.assertArrayEquals(new String[] {"a", "b", "c"}, Arrays.splice(array, 3));

Assert.assertArrayEquals(new String[] {"a", "b", "c", "d"}, Arrays.splice(array, 4));

Assert.assertArrayEquals(new String[] {"a", "b", "c", "d", "e"}, Arrays.splice(array, 5));

Assert.assertArrayEquals(new String[] {"a", "b", "c", "d", "e", "f"}, Arrays.splice(array, 6));

try {

Arrays.splice(array, 7);

Assert.fail("Expected ArrayIndexOutOfBoundsException");

}

catch (final ArrayIndexOutOfBoundsException e) {

}

Assert.assertArrayEquals(new String[] {"a", "b", "c", "d", "e"}, Arrays.splice(array, -1));

Assert.assertArrayEquals(new String[] {"a", "b", "c", "d"}, Arrays.splice(array, -2));

Assert.assertArrayEquals(new String[] {"a", "b", "c"}, Arrays.splice(array, -3));

Assert.assertArrayEquals(new String[] {"a", "b"}, Arrays.splice(array, -4));

Assert.assertArrayEquals(new String[] {"a"}, Arrays.splice(array, -5));

Assert.assertArrayEquals(new String[] {}, Arrays.splice(array, -6));

try {

Arrays.splice(array, -7);

Assert.fail("Expected NegativeArraySizeException");

}

catch (final NegativeArraySizeException e) {

}

Assert.assertArrayEquals(new String[] {"x", "y", "z", "c", "d", "e", "f"}, Arrays.splice(array, 0, 2, "x", "y", "z"));

Assert.assertArrayEquals(new String[] {"a", "x", "y", "z", "d", "e", "f"}, Arrays.splice(array, 1, 2, "x", "y", "z"));

Assert.assertArrayEquals(new String[] {"a", "b", "x", "y", "z", "e", "f"}, Arrays.splice(array, 2, 2, "x", "y", "z"));

Assert.assertArrayEquals(new String[] {"a", "b", "c", "x", "y", "z", "f"}, Arrays.splice(array, 3, 2, "x", "y", "z"));

Assert.assertArrayEquals(new String[] {"a", "b", "c", "d", "x", "y", "z"}, Arrays.splice(array, 4, 2, "x", "y", "z"));

try {

Arrays.splice(array, 5, 2, "x", "y", "z");

Assert.fail("Expected ArrayIndexOutOfBoundsException");

}

catch (final ArrayIndexOutOfBoundsException e) {

}

Assert.assertArrayEquals(new String[] {"a", "b", "c", "d", "x", "y", "z"}, Arrays.splice(array, -2, 2, "x", "y", "z"));

Assert.assertArrayEquals(new String[] {"a", "b", "c", "x", "y", "z", "f"}, Arrays.splice(array, -3, 2, "x", "y", "z"));

Assert.assertArrayEquals(new String[] {"a", "b", "x", "y", "z", "e", "f"}, Arrays.splice(array, -4, 2, "x", "y", "z"));

Assert.assertArrayEquals(new String[] {"a", "x", "y", "z", "d", "e", "f"}, Arrays.splice(array, -5, 2, "x", "y", "z"));

Assert.assertArrayEquals(new String[] {"x", "y", "z", "c", "d", "e", "f"}, Arrays.splice(array, -6, 2, "x", "y", "z"));

try {

Arrays.splice(array, -7, 2, "x", "y", "z");

Assert.fail("Expected ArrayIndexOutOfBoundsException");

}

catch (final ArrayIndexOutOfBoundsException e) {

}

}

编辑: 正如@denys-

séguret正确指出的那样,此实现与JavaScript规范不同,因为它不会更改/修改原始数组。而是,此实现返回一个新的数组实例。

编辑: 在给定的Maven存储库中,以下Maven工件可以使用此实现:

...

org.safris.commons

commons-lang

1.6.4

...

mvn.repo.safris.org

http://mvn.repo.safris.org/m2

...

2020-11-26


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部