Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java等价方法;拼接(a、b等)“;在JavaScript方法中_Java_Javascript_Splice - Fatal编程技术网

Java等价方法;拼接(a、b等)“;在JavaScript方法中

Java等价方法;拼接(a、b等)“;在JavaScript方法中,java,javascript,splice,Java,Javascript,Splice,JavaScript中的splice(a,b,…)方法在数组中添加或删除项。用Java语言实现这种方法,有什么好的简单的解决方案?假设我们有String[]数组。Java数组有固定的长度,所以没有这样的方法 您可以想象在Java中编写一个类似于splice的实用函数,但它将返回一个不同的数组。如果调整数组的大小,在java中使用数组是没有意义的:这样做效率不高,而且不能共享实例 通常清洁的解决方案是使用a,这是一个可调整大小的集合,最常用的列表实现由数组支持,但由于数组不会在每次调整集合大小时更

JavaScript中的splice(a,b,…)方法在数组中添加或删除项。用Java语言实现这种方法,有什么好的简单的解决方案?假设我们有
String[]
数组。

Java数组有固定的长度,所以没有这样的方法

您可以想象在Java中编写一个类似于splice的实用函数,但它将返回一个不同的数组。如果调整数组的大小,在java中使用数组是没有意义的:这样做效率不高,而且不能共享实例


通常清洁的解决方案是使用a,这是一个可调整大小的集合,最常用的列表实现由数组支持,但由于数组不会在每次调整集合大小时更改,因此非常有效。

在标准Java库中,没有等效的功能。


java.util.array
类,但没有类似的功能。

我误读了你的问题,把
splice
slice
搞混了

java.util.Arrays
提供了一些使用数组时有用的静态函数。有关其他功能,请参阅官方文档:

Java对
slice
的等价物是:
Arrays.copyOfRange(array,from,to)


splice
类似的方法是
addAll
()。但是您需要使用
java.util.ArrayList
来代替数组,因此无法使用它删除元素。您必须将元素作为另一个集合提供,例如
ArrayList
。因此,它相当于调用
拼接(index,0,element1,element2,…)

Java数组具有固定长度,因此无法直接执行此操作

如果要组合两个阵列,请查看


如果要添加到数组中,则应使用
列表
数组列表

以下是根据

编辑:正如@denys-séguret正确指出的那样,此实现与JavaScript规范不同,因为它不改变/修改原始数组。相反,此实现返回一个新的数组实例

编辑:在给定的maven repo中,此实现可用于以下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>

...
org.safris.commons
公地郎
1.6.4
...
mvn.repo.safris.org
http://mvn.repo.safris.org/m2
...

Java中的数组具有固定数量的元素。但您可以将该元素设置为null,如下所示:

数组[元素]==null


这与将其从阵列中移除相同。您还可以使用一个变量来跟踪有多少元素不是空的,这样您甚至可以拥有一个array.length之类的东西。这就是我要做的。

如果您正在寻找调整数组大小的方法,那么您可能应该使用
List
而不是数组。这将为您提供
addAll(index,Collection)
,您可以将其用作
addAll(index,Arrays.aslList(“foo”,“bar”))
在Java中,数组不能添加到(grown)。使用
ArrayList
实现这一点。现在我正在考虑
substring()
方法。我们来看看。@Ernestasgrouodis与
子字符串
有什么关系?我可以将
数组
转换为
字符串
,然后
子字符串()
并创建
数组
。但不是有效的方法…不,不是。他说的是变异,这将创建数组的副本。不,这将返回一个新数组。
splice
中有趣的一点是它更改了源数组。我假设这个
splice
:它不会更改调用它的数组,而是返回一个新数组。我喜欢这个方法,很快就会尝试。但是
splice
方法也可以添加到
array
,使它更大。。。因此,我认为唯一的方法是使用
ArrayList
。请修正您的介绍,它不实现splice的规范,因为它不修改传递的数组,而是返回一个新数组。如前所述,在Java中修改数组是不可能的(使用列表是明智而快速的最佳实践)。谢谢:)@msangel,我用一个maven工件更新了答案,你可以作为依赖项引用。
@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) {
    }
  }
<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>