Java:在字符串数组中查找字符串的一部分并生成新数组

Java:在字符串数组中查找字符串的一部分并生成新数组,java,arrays,function,Java,Arrays,Function,我在一个数组中有一个列表,每个条目在一个单词前面都包含o:或g:,比如o:word或g:word。我需要两个函数,一个用来生成一个只包含g:'的数组,另一个用来生成一个只包含o:'的数组 我还希望从结果中删除g:'s和o:'s。我不知道如何在不引起数组越界错误的情况下执行此操作,所以我想知道是否有人可以给我举个例子。闻起来像是家庭作业 String[] array = ... ArrayList<String> gList = new ArrayList<String>

我在一个数组中有一个列表,每个条目在一个单词前面都包含o:或g:,比如o:word或g:word。我需要两个函数,一个用来生成一个只包含g:'的数组,另一个用来生成一个只包含o:'的数组

我还希望从结果中删除g:'s和o:'s。我不知道如何在不引起数组越界错误的情况下执行此操作,所以我想知道是否有人可以给我举个例子。

闻起来像是家庭作业

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));  
    } 
}
String[]数组=。。。
ArrayList gList=新的ArrayList();
ArrayList oList=新的ArrayList();
对于(字符串字:数组){
如果(字!=null)){
if(word.startsWith(“g:))
gList.add(word.subString(2));
else if(word.startsWith(“o:”)
添加(单词子字符串(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));  
    } 
}
String[]数组=。。。
ArrayList gList=新的ArrayList();
ArrayList oList=新的ArrayList();
对于(字符串字:数组){
如果(字!=null)){
if(word.startsWith(“g:))
gList.add(word.subString(2));
else if(word.startsWith(“o:”)
添加(单词子字符串(2));
} 
}

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

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

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

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());
int n=0;
for(int i=0;i

未尝试过,但我认为应该这样做。

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

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());
int n=0;
for(int i=0;i

未尝试过,但我认为这应该可以完成任务。

假设您可以将原始阵列弄乱,并且不需要保留顺序,这应该非常快:

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);
String[]数组={“o:1”、“o:2”、“g:10”、“o:3”、“g:20”、“o:4”、“g:30”、“g:40”、“o:5”};
int低=0;
int高=数组长度-1;

虽然(低假设您可以将原始数组弄乱,并且不需要保留顺序,但这应该非常快:

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);
String[]数组={“o:1”、“o:2”、“g:10”、“o:3”、“g:20”、“o:4”、“g:30”、“g:40”、“o:5”};
int低=0;
int高=数组长度-1;

while(low)打乱初始数组可以吗?当您发现自己想知道如何在不导致数组越界错误的情况下执行某些操作时,请思考ArrayList.:)打乱初始数组可以吗?当您发现自己想知道如何在不导致数组越界错误的情况下执行某些操作时,请思考ArrayList.:)你有个人反对大括号吗?:PSure。它们是“代码垃圾”。不必要的大括号会降低可读性。imnsho。你有个人反对大括号吗?:PSure。它们是“代码垃圾”。不必要的大括号会降低可读性。我不知道。这不是作业,但谢谢你。这不完全是我想要的,但我修改了它以供我使用。这不是作业,但谢谢你。这不完全是我想要的,但我修改了它以供我使用。