如何大写每个元素的第一个字符并在ArrayList中删除?

时间:2019-04-23 05:26:09

标签: java arraylist data-structures

我正在尝试迭代以“ m”(而不是M)开头的数组列表中的所有首字符,并删除所有不以m或M开头的字符。 我在这里尝试了一个代码,该代码似乎帮助我删除了几个单词,但删除了我想要的单词,并且没有按我的需要将单词大写。这就是我记下我添加的一些代码的方式

    int i = 0;
    int j = 0;
    for (i = 0; i < myNameList.size(); i++) {

        String name = myNameList.get(i);
        String[] names = name.split("\\s+");
        StringBuilder sb = new StringBuilder();

        for (j = 0; j < names.length; j++) {
            if (j != 0) {
                sb.append(' ');
            }

            sb.append(Character.toUpperCase(names[j].charAt(0)));
            sb.append(names[j].substring(1).toLowerCase());
        }
        if (names[0] == "m") {
            myNameList.set(i, sb.toString());
        } else if ((names[0] != "m" && names[0] != "M")) {
            myNameList.remove(i);
        }
    }//end for loop
    System.out.println(myNameList);

结果: 输入您要输入的名称 插入前清单 墨尔本麦凯美人鱼海滩梅特兰Maroochydore Muwoolimbah Merriwether Monkeytown Troydon [麦凯,梅特兰,Muwoolimbah,猴子镇]
删除后清单 麦凯梅特兰Muwoolimbah Monkeytown

删除后

            else if ((names[0] != "m" || names[0] != "M")) {
            myNameList.remove(i);
        }

插入前列出 墨尔本麦凯美人鱼海滩梅特兰Maroochydore Muwoolimbah Merriwether Monkeytown Troydon [墨尔本,麦凯,美人鱼海滩,梅特兰,Maroochydore,Muwoolimbah,Merriwether,Monkeytown和Troydon]
删除后清单 墨尔本麦凯美人鱼海滩梅特兰Maroochydore Muwoolimbah Merriwether Monkeytown Troydon

2 个答案:

答案 0 :(得分:1)

您可以先过滤列表,以仅包含以m / M开头的单词。
然后大写第一个字母,最后收集到列表。

List<String> cleanList = list.stream()
    .filter(s -> s.startsWith("m") || s.startsWith("M"))
    .map(s -> s.startsWith("m")
        ? "M" + s.substring(1) : s)
    .collect(Collectors.toList());

您应避免如下所示对“ m”进行硬编码:

完整示例

public static void main(String[] args) {
    List<String> list = List.of("man", "Many", "notM");
    System.out.println(cleanList(list, 'm'));
}

private static List<String> cleanList(List<String> list, char letter) {
    return list.stream()
            .filter(s -> Character.toUpperCase(s.charAt(0)) == Character.toUpperCase(letter))
            .map(s -> Character.isLowerCase(s.charAt(0))
                    ? Character.toUpperCase(s.charAt(0)) + s.substring(1) : s)
            .collect(Collectors.toList());
}

输出

  

[很多人]

答案 1 :(得分:0)

一种更简单的方法是

for (String name : myNameList) {

    String str = name.replaceAll("^m", "M");  // replace beginning `m` with `M`
    if (str.charAt(0) == 'M')
    {
        newList.add (str);
    }
}