Java: поиск части строки в массиве строк и создание нового массива - PullRequest
0 голосов
/ 29 декабря 2010

У меня есть список в массиве, каждая запись содержит o: или g: перед словом, например, o: word или g: word. Я хочу, чтобы 2 функции, одна для создания массива только с g: и одна для создания массива только с o: 's

Я также хочу, чтобы g: s и o: s были удалены из результата. Я не уверен, как это сделать, не вызывая ошибок массива за пределами границ и тому подобное, поэтому мне было интересно, кто-нибудь может дать мне пример.

Ответы [ 4 ]

2 голосов
/ 29 декабря 2010

Пахнет домашней работой.

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 голос
/ 29 декабря 2010

Один из способов - использовать ArrayList s для создания новых списков.Если вам нужно иметь примитивные массивы после получения двух новых списков, просто используйте toArray() для них.

0 голосов
/ 29 декабря 2010

Предполагая, что вы можете испортить исходный массив, и вам не нужно сохранять порядок, это должно быть довольно быстро:

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);
0 голосов
/ 29 декабря 2010

Вам лучше работать с 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());

Не проверено, но я думаю, что это следует сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...