在java中拆分字符串数组

在java中拆分字符串数组,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,在某个索引中拆分字符串数组以生成字符串矩阵并删除拆分的元素的最佳方法是什么。例如,对于字符串数组[“Good”、“Bad”、“Sad”]如果我将其拆分为1,它将给我一个字符串矩阵,看起来像这样[“Good”],[“Sad”],您可以使用ArrayList而不是数组。从arraylist中删除随机元素非常容易,因为它是动态的 ArrayList>String> list = new ArrayList<String>(); ... list.remove(1); Arra

在某个索引中拆分字符串数组以生成字符串矩阵并删除拆分的元素的最佳方法是什么。例如,对于字符串数组
[“Good”、“Bad”、“Sad”]
如果我将其拆分为1,它将给我一个字符串矩阵,看起来像这样
[“Good”],[“Sad”]

,您可以使用
ArrayList
而不是数组。从arraylist中删除随机元素非常容易,因为它是动态的

ArrayList>String> list = new ArrayList<String>();
...
list.remove(1);
ArrayList>String>list=newarraylist();
...
列表。删除(1);

您可以使用
ArrayList
而不是array。从arraylist中删除随机元素非常容易,因为它是动态的

ArrayList>String> list = new ArrayList<String>();
...
list.remove(1);
ArrayList>String>list=newarraylist();
...
列表。删除(1);

伊万诺维奇的回答解释了如何使用java集合(列表)简单地从字符串序列中删除一个元素。这确实是实现这一目标的简单方法(删除元素)

然而,我对OP问题的理解是,他得到一个字符串数组作为参数,并希望返回一个二维字符串数组。结果字符串[]中不应包含“拆分索引”元素

根据我的理解,我因此补充另一个答案:

final String[] input = new String[] { "one", "two", "three", "four", "five", "six", "seven", "eight" };
        final int len = input.length;
        final int pos = 3;
        final String[][] result = new String[2][Math.max(pos, len - pos - 1)];
        result[0] = Arrays.copyOf(input, pos);
        result[1] = Arrays.copyOfRange(input, pos + 1, len);
这甚至不是java方法,但它解释了如何获得结果。在上面的示例中,结果将是一个二维数组,
[[1,2,3],[5,6,7,8]

编辑:

用一种简单的方法包装它:

public static String[][] splitStringArray(String[] input, int pos) {
        final int len = input.length;
        final String[][] result = new String[2][Math.max(pos, len - pos - 1)];
        result[0] = Arrays.copyOf(input, pos);
        result[1] = Arrays.copyOfRange(input, pos + 1, len);
        return result;
    }

请注意,错误处理部分不存在,例如pos出键处理、NPE检查(输入)等。我相信您可以自己完成。

ivanovic的回答解释了如何使用java集合(列表)从字符串序列中删除一个元素。这确实是实现这一目标的简单方法(删除元素)

然而,我对OP问题的理解是,他得到一个字符串数组作为参数,并希望返回一个二维字符串数组。结果字符串[]中不应包含“拆分索引”元素

根据我的理解,我因此补充另一个答案:

final String[] input = new String[] { "one", "two", "three", "four", "five", "six", "seven", "eight" };
        final int len = input.length;
        final int pos = 3;
        final String[][] result = new String[2][Math.max(pos, len - pos - 1)];
        result[0] = Arrays.copyOf(input, pos);
        result[1] = Arrays.copyOfRange(input, pos + 1, len);
这甚至不是java方法,但它解释了如何获得结果。在上面的示例中,结果将是一个二维数组,
[[1,2,3],[5,6,7,8]

编辑:

用一种简单的方法包装它:

public static String[][] splitStringArray(String[] input, int pos) {
        final int len = input.length;
        final String[][] result = new String[2][Math.max(pos, len - pos - 1)];
        result[0] = Arrays.copyOf(input, pos);
        result[1] = Arrays.copyOfRange(input, pos + 1, len);
        return result;
    }

请注意,错误处理部分并不存在,例如pos出局处理、NPE检查(输入)等。我相信您可以自己完成。

但是
链接列表
会更有效。要将其分为不同的列表,有一个
子列表
方法<代码>列表。子列表(0,3)例如。我是否误解了OP的问题?Collecion api确实使删除元素比删除数组更容易。然而,他想要一个多维数组作为结果。实际上,它将是2D字符串数组。尤其是“多维数组”标记。您是否建议他/她先将数组转换为列表,然后再将结果列表转换为数组(二维)再一次?我需要它是为了一个俄罗斯方块游戏,为了使用收集框架,我必须重写很多代码,所以我真的更喜欢使用数组,但是如果数组是一种将数组转换为arraylist并以这种方式拆分的简单方法,这会很好,但正如我们所知,
LinkedList
会更有效。要将列表分成不同的列表,有一个
subList
方法<代码>列表。子列表(0,3)例如。我是否误解了OP的问题?Collecion api确实使删除元素比删除数组更容易。然而,他想要一个多维数组作为结果。实际上,它将是2D字符串数组。尤其是“多维数组”标记。您是否建议他/她先将数组转换为列表,然后再将结果列表转换为数组(二维)再一次?我需要它是为了一个俄罗斯方块游戏,为了使用收集框架,我必须重写很多代码,所以我真的更喜欢使用数组,但是如果数组是一种将数组转换为arraylist并以这种方式拆分的简单方法,那太好了,你能用一个方法把它包起来吗?也许我不太确定每个变量是什么doing@popgalop代码中有一个硬编码的3。已经修好了。从我的答案中复制这个方法,再试一次。你能把它包装成一个方法吗?也许我不太清楚每个变量是什么doing@popgalop代码中有一个硬编码的3。已经修好了。从我的答案中复制方法,然后重试。