【问题标题】:Delete null element in 2d array in Java在Java中删除二维数组中的空元素
【发布时间】:2015-08-19 15:27:22
【问题描述】:

请帮帮我!, 我有这个字符串数组:

data2[3][2] = 
[[Datos Varios, Datos Empresa, null], 
[Listado2, Listado2 extendido, null], 
[Pendientes Validar, Pendientes Liquidar, Liquidados], 
[Pendientes Aprobar, Pendientes Pago, Pagados]]

我会找到一些东西来调整这个数组的大小以获得这个: 我不知道路..

data2[?][?] = 
[[Datos Varios, Datos Empresa], 
[Listado2, Listado2 extendido], 
[Pendientes Validar, Pendientes Liquidar, Liquidados], 
[Pendientes Aprobar, Pendientes Pago, Pagados]]

提前致谢!!

【问题讨论】:

  • 这句话'我会找到一些东西来删除我的数组中的一个空元素以获得这个:'至少可以说是令人困惑的。其次, null 意味着什么,你不能删除任何东西。这就像杀了一个死人,不可能,人已经死了,别管他。假设这就是你的意思。
  • @WeareBorg OP 具​​有未由对象填充的数组索引。他们希望以下对象向上移动以替换那些空槽,并减少总数组大小。诚然,处理这个问题的最好方法是处理数组被消耗的空索引。
  • 到底谁是OP,我猜你的意思是操作。好的,你已经静态地声明了数组的大小,现在你看到了空条目。假设是这种情况,您可以简单地运行一个 for 循环并对其进行排序。这就是你想要的吗?

标签: java android arrays resize


【解决方案1】:

我认为您的问题可能与数组的二维结构有关,建议的链接是一维的。因此,这里有一个针对 2d 案例构建的建议解决方案,对您的数据进行简单测试。

import java.util.ArrayList;

public class TestApp {

    public static void main(String[] args){

        String[][] data = 
        {{"Datos Varios", "Datos Empresa", null}, 
        {"Listado2", "Listado2 extendido", null}, 
        {"Pendientes Validar", "Pendientes Liquidar", "Liquidados"},
        {"Pendientes Aprobar", "Pendientes Pago", "Pagados"}};

        String[][] cleanedData = removeNull(data);

        System.out.println("Before");
        printArray(data);
        System.out.println("after");
        printArray( cleanedData );
    }

    public static void printArray(String[][] arr2d){
        for(String[] arr1d: arr2d){
            for(String s: arr1d){
                System.out.print(s+", ");
            }
            System.out.print("\n");
        }
    }

    public static String[][] removeNull( String[][] arr2d) {
        //
        ArrayList<ArrayList<String>> list2d = new ArrayList<ArrayList<String>>();
        //
        for(String[] arr1d: arr2d){
            ArrayList<String> list1d = new ArrayList<String>();
            for(String s: arr1d){
                if(s != null && s.length() > 0) {
                    list1d.add(s);
                }
            }
            // you will possibly not want empty arrays in your 2d array
            // so I removed them
            if(list1d.size()>0){
                list2d.add(list1d);
            }
        }
        String[][] cleanArr = new String[list2d.size()][];
        int next = 0;
        for(ArrayList<String> list1d: list2d){
            cleanArr[next++] = list1d.toArray(new String[list1d.size()]);
        }
        return cleanArr;
    }
}

【讨论】:

  • 哇非常适合我的代码!如果你或其他人不理解我的问题,很抱歉,但这解决了我的问题 100% 爱你。
  • @Drewico,我很乐意提供帮助。祝你的项目好运。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多