Java:在String Array中查找字符串的一部分并创建一个新数组

时间:2010-12-28 21:06:45

标签: java arrays function

我在数组中有一个列表,每个条目在一个单词前面包含o:或g:,如o:word或g:word。我想要2个函数,一个只用g:做一个数组,另一个只用o:'生成一个数组

我也希望从结果中删除g:'s和o:'s。我不知道如何在不造成数组越界错误的情况下如何做到这一点,所以我想知道是否有人可以给我一个例子。

4 个答案:

答案 0 :(得分:2)

闻起来像家庭作业。

String[] array = ...

ArrayList<String> gList = new ArrayList<String>();

ArrayList<String> oList = new ArrayList<String>();

for (String word : array) {  
    if (word != null)) {  
        if (word.startsWith("g:"))   
            gList.add(word.subString(2));  
        else if (word.startsWith("o:")
            oList.add(word.subString(2));  
    } 
}

答案 1 :(得分:1)

一种方法是使用ArrayList来创建新列表。如果在获得两个新列表后需要使用原始数组,只需在它们上使用toArray()

答案 2 :(得分:0)

使用ArrayLists(比数组)更好,因为您事先不知道结果的大小。但是你可以进行两次传递,一次用于计算感兴趣前缀的行,另一次用于填充新数组。

int n = 0;
for (int i = 0; i < array.size; i++)
  if (array[i].startsWith(prefix))
    n++;

String[] result = new String[n];
int j = 0;

for (int i = 0; i < array.size; i++)
  if (array[i].startsWith(prefix))
    result[j++] = array[i].substring(prefix.length());

未经试验,但我认为应该做这个工作。

答案 3 :(得分:0)

假设您可以搞乱原始数组,并且您不需要保留顺序,这应该非常快:

String[] array = {"o:1","o:2","g:10","o:3","g:20","o:4","g:30","g:40","o:5"};
int low = 0;
int high = array.length - 1;
while(low <= high) {
    if(array[low].startsWith("g:")) {
        array[low] = array[low].substring(2);
        low ++;
    } else if (array[high].startsWith("o:")) {
        array[high] = array[high].substring(2);
        high --;
    } else {
        String temp = array[low].substring(2);
        array[low] = array[high].substring(2);
        array[high] = temp;
        low++;
        high--;
    }
}
String[] gs = new String[low];
System.arraycopy(array, 0, gs, 0, low);
String[] os = new String[array.length - low];
System.arraycopy(array, low, os, 0, array.length - low);