我在数组中有一个列表,每个条目在一个单词前面包含o:或g:,如o:word或g:word。我想要2个函数,一个只用g:做一个数组,另一个只用o:'生成一个数组
我也希望从结果中删除g:'s和o:'s。我不知道如何在不造成数组越界错误的情况下如何做到这一点,所以我想知道是否有人可以给我一个例子。
答案 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);