Java 在遍历arraylist时删除空值的步骤

Java 在遍历arraylist时删除空值的步骤,java,Java,我试图用这段代码替换arraylist中的空值。我在xml文件的标记中得到空值。该标记中的值来自arraylist。我想从标记中删除null,并且不放置任何内容来代替它。我的代码是这样的: for(String s:a.getList){ here I setting values in tag by create tag and than appending child nodess using DOM parser. } <value>1</value&g

我试图用这段代码替换arraylist中的空值。我在xml文件的标记中得到空值。该标记中的值来自arraylist。我想从标记中删除null,并且不放置任何内容来代替它。我的代码是这样的:

    for(String s:a.getList){
here I setting values in tag by create tag and than appending child nodess using DOM parser.
}
    <value>1</value>
<value>2</value>
<value>null</value>
<value>3</value>
<value>4</value>
<value>null</null>
其中a=包含列表的对象

输出如下:

    for(String s:a.getList){
here I setting values in tag by create tag and than appending child nodess using DOM parser.
}
    <value>1</value>
<value>2</value>
<value>null</value>
<value>3</value>
<value>4</value>
<value>null</null>
总是出现空指针异常,不知道是否会运行输出。
请帮助..

您不是在更新列表,而是在创建一个新的
String
实例,因为
String
是不可变的。如果当前值为
“null”

for(int i=0;i

对于
null
值,该条件不会失败,但如果要替换这些值,则需要添加该条件,因为目前它只会更新
“null”

您不是在更新列表,而是在创建一个新的
字符串
实例,因为
字符串
是不可变的。如果当前值为
“null”

for(int i=0;i
对于
null
值,该条件不会失败,但如果要替换这些值,则需要添加该条件,因为现在,它只会更新
“null”
,以使其更清晰

public static void main(String... args) {
    ArrayList<String> a = new ArrayList<String>();
    a.add("one");
    a.add(null);
    a.add("two");
    a.removeAll(Collections.singleton(null));
    for(String value : a) {
        System.out.println(value);
    }
}
更清楚地说

public static void main(String... args) {
    ArrayList<String> a = new ArrayList<String>();
    a.add("one");
    a.add(null);
    a.add("two");
    a.removeAll(Collections.singleton(null));
    for(String value : a) {
        System.out.println(value);
    }
}

如果要同时删除,使用数组列表的最佳方法是从最后一个迭代到第一个

for (int i = list.size()-1; i >= 0; i--) {
        if ("null".equalsIgnoreCase(list.get(i))) {
            list.remove(i);
        }
    }
“null”.equalsIgnoreCase(list.get(i))将避免null指针异常

用于删除和打印值

for (String str  :  abc) {
        if ("null".equalsIgnoreCase(str)) {
            System.out.println("<value/>");
        } else {
            System.out.println("<value>"+str+"</value>");
        }
    }
for(字符串str:abc){
如果(“空”。相等信号案例(str)){
System.out.println(“”);
}否则{
System.out.println(“+str+”);
}
}

如果要同时删除,使用数组列表的最佳方法是从最后一个循环到第一个循环

for (int i = list.size()-1; i >= 0; i--) {
        if ("null".equalsIgnoreCase(list.get(i))) {
            list.remove(i);
        }
    }
“null”.equalsIgnoreCase(list.get(i))将避免null指针异常

用于删除和打印值

for (String str  :  abc) {
        if ("null".equalsIgnoreCase(str)) {
            System.out.println("<value/>");
        } else {
            System.out.println("<value>"+str+"</value>");
        }
    }
for(字符串str:abc){
如果(“空”。相等信号案例(str)){
System.out.println(“”);
}否则{
System.out.println(“+str+”);
}
}


如果(null==s | | s.equals(“null”))仅检查值,即(1,2,null…)已对这两个值进行了检查…不工作,请尝试此条件。如果“正在更新”,是否可以在此发布插入代码和错误空指针异常不可变的
字符串
。您需要更改列表,因此更改当前索引处的值(需要更改循环)。如果(null==s | | s.equals(“null”))仅检查值,请尝试此条件,即(1,2,null…)已经对这两个进行了操作…无法工作。如果您正在“更新”不可变的
字符串,
,您可以在此处发布插入代码和错误空指针异常…您需要更改列表,因此更改当前索引的值(需要更改循环)顺便说一句,这是due-to的一个很好的用例。@Izruo它确实是,我使用得不够(在我看来,迭代器总是只读的)!如果你愿意,欢迎你发布它的答案!这是due-to的一个很好的用例。@Izruo它确实是,我使用得不够(在我看来,迭代器总是只读的)!欢迎您发布它的答案,如果您愿意的话!“为了更好地理解”?希望我的java比我的英语好
removeAll
很好,但这将成为一个问题,因为OP想删除
“null”
,如果这些变成
“null”
,不确定您是否可以
removeAllIgnoreCase
(不包括lambda)我的观点是:“没有解释”…你需要解释你做了什么他说“看到了这个问题,也试过了…得到了同样的例外”所以我想给他看一个工作示例…我认为原始问题中的解释足够好“以便更好地理解”?希望我的java比我的英语好
removeAll
很好,但这将成为一个问题,因为OP想要删除
“null”
,如果这些变成
“null”
,不确定你能不能
删除AlligonoreCase
(不一定有lambda的等价物)我的观点是:“没有解释”…你需要解释你做了什么他说“看到这个问题,也试过了…得到了同样的例外”所以我想给他看一个工作示例……我认为原始问题中的解释很好——不幸的是,它仍然在预期输出中打印XML节点。@AxelH您能给我一个arraylist值的示例以及预期输出是什么吗?希望arraylist中的null是一个字符串。我的意思是“null”NOTNULL。如果它不是一个字符串,那么您必须使用null==lis.get(i)来删除conditioncheck OP问题,因为…他正在以XML格式的值打印他的列表。(假设它正在节点中添加列表的内容。但是
null
应该输出
,而不是简单地删除它。@AxelH我更专注于同时从arraylist中删除null字符串。如果你想要上面提到的内容,我想我的回答的第二部分会帮助你我不想要任何东西g、 ..检查名称;)不幸的是,它仍在预期输出中打印XML节点。@AxelH您能给我一个arraylist值的示例以及预期输出是什么吗?希望arraylist中的null是字符串形式。我的意思是“null”不是null。如果它不是字符串,那么您必须使用null==lis.get(I)为了删除conditioncheck OP的问题…他以XML格式的值打印他的列表。(假设它在节点中添加列表的内容。但是
null
应该输出
,而不是简单地重新打印。)