Как использовать первый символ каждого элемента и удалить его в ArrayList? - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь выполнить итерацию, чтобы извлечь все первые символы из моего списка массивов, которые начинаются с «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 [Mackay, Maitland, Muwoolimbah, monkeytown]
Список после удаления Mackay Maitland Muwoolimbah monkeytown

после удаления

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

Список перед вставкой Мельбурн Mackay Mermaid Beach Maitland Маручидор Muwoolimbah Merriwether monkeyourour Mroyourb, Мельдтаун Тройдон [Mermaid Beach, Мейтленд, Маручидор, Muwoolimbah, Merriwether, Monkeytown, Troydon]
Список после удаления Мельбурн Mackay Mermaid Beach Maitland Маручидор Muwoolimbah Merriwether Monkeytown Troydon

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Вы можете сначала отфильтровать список, чтобы в нем были только слова, начинающиеся с 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());
}

выход

[Человек, много]

0 голосов
/ 23 апреля 2019

Более простой способ -

for (String name : myNameList) {

    String str = name.replaceAll("^m", "M");  // replace beginning `m` with `M`
    if (str.charAt(0) == 'M')
    {
        newList.add (str);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...