栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaScript方法中“ splice(a,b,…)”的Java等价方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaScript方法中“ splice(a,b,…)”的Java等价方法

这是

Array.prototype.splice()
根据Javascript
MDN规范
的方法的Java实现。

  public static <T>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>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>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工件可以使用此实现:

<project>  ...  <dependencies>    <dependency>      <groupId>org.safris.commons</groupId>      <artifactId>commons-lang</artifactId>      <version>1.6.4</version>    </dependency>  </dependencies>  ...  <repositories>    <repository>      <id>mvn.repo.safris.org</id>      <url>http://mvn.repo.safris.org/m2</url>    </repository>  </repositories>  ...</project>


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/393624.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号