【问题标题】:How to capitalize the first character of each element AND delete in an ArrayList?如何大写每个元素的第一个字符并在ArrayList中删除?
【发布时间】:2019-04-23 05:26:08
【问题描述】:

我正在尝试迭代以大写我的数组列表中以“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);

结果: 输入你要输入的名字 插入前列表 墨尔本 Mackay Mermaid Beach Maitland Maroochydore Muwoolimbah Merriwether monkeytown Troydon [麦凯、梅特兰、Muwoolimbah、猴子镇]
删除后的列表 Mackay Maitland Muwoolimbah monkeytown

删除后

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

插入前列表 墨尔本 Mackay Mermaid Beach Maitland Maroochydore Muwoolimbah Merriwether monkeytown Troydon [墨尔本、麦凯、美人鱼海滩、梅特兰、Maroochydore、Muwoolimbah、Merriwether、Monkeytown、特洛伊登]
删除后的列表 墨尔本麦凯美人鱼海滩梅特兰 Maroochydore Muwoolimbah Merriwether Monkeytown Troydon

【问题讨论】:

  • names[0] == "m" 这可以编译吗?试试names[0] == 'm'
  • 嗯?你想大写例如man 然后删除?可以添加一些示例数据吗?
  • 抱歉刚刚更新了帖子,我想删除不以 M 或 m 开头的字符。墨尔本麦凯美人鱼海滩梅特兰 Maroochydore Muwoolimbah Merriwether monkeytown Troydon 是最初的名单。然后我得到 Mackay、Maitland、Muwoolimbah、monkeytown,而不是仅仅删除“Troydon”并将 Monkeytown 更改为 Monkeytown
  • 你的意思是任何不以m开头的词吗? dog -> og ?
  • 那么你的问题是什么?

标签: java arraylist data-structures


【解决方案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());
}

输出

[男人,很多]

【讨论】:

  • 谢谢!虽然我不明白删除方法,以及如何将它应用到我的案例中,让我看看我如何应用它
【解决方案2】:

更简单的方法是

for (String name : myNameList) {

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

【讨论】:

  • 谢谢!现在我将尝试将它们放在不同的方法中,现在我只需要知道如何以不同的方法删除列表中每个单词的第一个字符
  • 这是否在其他方法中无关紧要,只需将List作为参数传递即可。要简单地删除第一个字符,您只需执行String::substring (1) 我的代码的简单部分是您正在创建一个新列表并且只保留您想要保留的数据。
  • 我是否将 String::substring (1) 放在 else if 语句中?
  • 所以现在您想存储所有以mM 开头的单词,但您想剪掉第一个字符 - 对吧?如果是这样,请支持我的答案并更改为newList.add (str.substring (1));
猜你喜欢
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 2015-07-20
  • 2021-10-22
  • 2021-02-22
相关资源
最近更新 更多