Удалить нулевые значения массива

1

Я строю массив, основанный на сравнении двух других массивов. Но когда я инициализирую свой третий массив, я должен установить длину. Но в некоторых случаях мой массив имеет нулевые объекты. Оттуда я могу сбросить пустые/нулевые позиции в массиве. См. Мой код ниже:

  private String[]  tags     = new String[] { "Mike", "Bob", "Tom", "Greg" };
  private boolean[] selected = new boolean[tags.length];
  public String[] selected_tags = new String[tags.length];

        for (int i = 0; i < tags.length; i++) {
            if (selected[i] == true){
               selected_tags[i] = tags[i];
            }
        }

Я оставил код для Boolen selected [] которые строят Boolen selected [].

В любом случае, если я выберу только 2 тега, тогда мой массив selected_tags [] будет Mike, Bob, Null, Null

Мне нужно получить Null Null. Заранее спасибо!

  • 0
    Я предлагаю вам использовать ArrayList вместо.
Теги:
arrays

4 ответа

9
Лучший ответ

Вы можете использовать ArrayList вместо массива.

private String[]  tags     = new String[] { "Mike", "Bob", "Tom", "Greg" };
private boolean[] selected = new boolean[tags.length];
public List<String> selected_tags = new ArrayList<String>();

for (int i = 0; i < tags.length; i++) {
    if (selected[i] == true){
        selected_tags.add(tags[i]);
    } 
}
  • 0
    Можно поверить, что я потратил впустую час, пытаясь взломать это вместе, когда это было так просто. Спасибо!
  • 3
    @ Denoteone Пожалуйста, нажмите на галочку рядом с ответом, который отвечает на ваш вопрос. Таким образом, другие сразу узнают, что на вопрос дан ответ. (Также приятно проголосовать за полезные ответы.)
Показать ещё 1 комментарий
4

Нет, вы не можете сбросить нулевые значения (и изменить длину массива) после того, как вы его создали. Вам нужно будет создать новый (или, например, использовать ArrayList, как показано ниже):

List<String> list = new ArrayList<String>();

for (int i = 0; i < tags.length; i++)
    if (selected[i] == true)
        list.add(tags[i]);

// Convert it to an array if needed:
selected_tags = list.toArray(new String[list.size()]);
2

Как отмечали другие, это намного проще с ArrayList. Вы даже можете получить регулярный массив из него с помощью функции toArray.

Без использования ArrayList вам придется сначала определить длину и не включать в себя null значения. Как вы можете видеть, это немного грязно:

int length = 0;
for( boolean b : selected ) if(b) ++length; // Count the "true"s

String[] selected_tags = new String[length];
for( int i = 0, j = 0; i < tags.length; i++ )
    if( selected[i] )
        selected_tags[j++] = tags[i];
2

Вместо использования стандартного массива Java вы должны использовать ArrayList: он позволит вам добавлять к нему элементы, автоматически увеличивая список по мере необходимости.


В принципе, вы сначала объявляете/инициализируете ArrayList, не указав какой-либо размер:

public ArrayList<String> selected_tags = new ArrayList<String>();

И затем в вашем цикле вы должны использовать метод add() для добавления элементов в этот ArrayList:

selected_tags.add(tags[i]);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню