首页 > 解决方案 > 如何删除数组中的“null”元素?

问题描述

我目前正在做一个编码挑战,其中指出:

给定一个单词列表,返回只能在美式键盘的一行中使用字母输入的单词,如下图所示(这是 QWERTY 键盘的图像)。

例子:

Input: ["Hello", "Alaska", "Dad", "Peace"]
Output: ["Alaska", "Dad"]

我为解决这个问题所做的工作是编写一个 for 循环,然后执行 if 语句将所有行(如 QWERTY)替换为""并且如果它的长度大于 1,那么您不能在一行中键入该单词。我得到了几乎正确的输出,但我的数组包含空元素。

我的输出是:

[null,"Alaska","Dad",null]

如何返回没有这些空元素的数组?为了完成这个挑战,我必须返回一个String[]数组。我不能用一个ArrayList返回。

class Solution {
    public String[] findWords(String[] words) {
    String[] result = new String[words.length];

    String row1 = "qwertyuiop";
    String row2 = "asdfghjkl";
    String row3 = "zxcvbnm";

    for (int i = 0 ; i < words.length; i++) {
        if (words[i].toLowerCase().replaceAll("[" + row1 + "]", "").length() == 0 ||
           words[i].toLowerCase().replaceAll("[" + row2 + "]", "").length() == 0 ||
           words[i].toLowerCase().replaceAll("[" + row3 + "]", "").length() == 0) {
            if (words[i] != null) {
                result[i] = words[i];
            }


        }
       }

    return result;
    }


}

标签: javaarraysalgorithmarray-algorithms

解决方案


使用这一个班轮:

Arrays.stream(result).filter(Objects::nonNull).toArray(String[]::new)

过滤数组并获取所有非空对象。不要忘记将流转换回数组。


推荐阅读