2012-12-02 30 views
0

在某个索引中拆分字符串数组以创建一个字符串矩阵来移除您拆分的元素的最佳方法是什么?例如,对于字符串数组["Good","Bad","Sad"]如果我在1拆它,它会给我这个样子[["Good"],["Sad"]]在java中分割一个字符串数组

回答

1

好ivanovic的答案解释了如何简单地从java集合(列表)中删除一个字符串序列中的元素。这确实是实现这一目标的直接方式(删除元素)。

但是,我对OP的问题的理解是,他得到一个字符串数组作为参数,并希望返回一个二维字符串数组。 “split-index”元素不应包含在结果String [] []中。在我的理解

基地,所以我再添答案:

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的方法,但它说明了如何获取结果。在上面的例子中,其结果将是一个2-d阵列,[[one, two, three], [five, six, seven, eight]]

编辑:

它包装在一个方法是容易的:

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 outofbound处理,NPE检查(输入)等,你可以自己做,我相信。

+0

你可以用一种方法包装这可能我不是很确定每个变量正在做什么 – popgalop

+0

@popgalop答案更新 – Kent

+0

,但不会只适用于具有3个元素的阵列 – popgalop

5

可以使用ArrayList代替阵列字符串矩阵。从数组列表中移除随机元素非常容易,因为它是动态的。

ArrayList>String> list = new ArrayList<String>(); 
... 
list.remove(1); 
+1

但我们知道'LinkedList'会更有效率。 – bellum

+0

为了分离出不同的列表,有一个'subList'方法。例如'list.subList(0,3)'。 –

+1

我误解了OP的问题吗? Collecion api确实比删除元素更容易。然而,他想要一个多维数组作为结果。实际上,它将是2D String数组。特别是使用“多维数组”标签。您是否建议他/她先将数组转换为列表,然后再将结果列表转换为数组(2-d)? – Kent