我正在尝试从csv字符串转换的数组中删除空值。
这就是我想要做的。
public class ArrayTest {
public static void main(String[] args) {
String commaSeparated = "item1,null,item1,null,item3";
String [] items = commaSeparated.split(",");
String[] result = removeNull(items);
System.out.println(Arrays.toString(result));
}
public static String[] removeNull(String[] items) {
ArrayList<String> aux = new ArrayList<String>();
for (String elem : items) {
if (elem != null) {
aux.add(elem);
}
}
return (String[]) aux.toArray(new String[aux.size()]);
}
}
我仍然得到如下的输出,它仍然具有空值。能不能指出我这个
有什么问题[item1, null, item1, null, item3]
答案 0 :(得分:1)
更改
if (elem != null)
到
if (!elem.equals("null"))
.split
函数返回一个字符串数组,因此那些预期为null
的元素实际上不是"null"
字符串。
答案 1 :(得分:1)
您的removeNulls()
方法确实删除了空Strings
,但请记住,当您执行String.split
时,您实际上正在创建一个非空String
,其值恰好发生在be&#34; null&#34;。
所以改变这个......
if (elem != null) {
为此,要考虑&#34; null&#34; ...
if (elem != null && !elem.equalsIgnoreCase("null")) {
答案 2 :(得分:0)
removeNull(String[])
工作正常,这是被打破的测试。考虑创建这样的测试输入:
public static void main(String[] args) {
String [] items = {"item1",null,"item1",null,"item3"};
String[] result = removeNull(items);
System.out.println(Arrays.toString(result));
}
顺便说一下,这是一个考虑仿制药的好地方。如果您希望方法签名看起来像这样T[] removeNull(T[] input)
,该怎么办?这可能会为您提供一些有趣的选择和更多样化的最终产品。
答案 3 :(得分:0)
with streams:
public static void main(String[] args) {
String commaSeparated = "item1,null,item1,null,item3";
String[] items = commaSeparated.split(",");
String[] result = Arrays.stream(items)
.filter(s -> s != null && !s.equals("null"))
.toArray(String[]::new);
System.out.println(Arrays.toString(result));
}