Как удалить конкретную строку, хранящуюся в ArrayList - PullRequest
1 голос
/ 27 июня 2019

У меня есть код, который хранит значения для последующего использования. Но мне нужно найти точные имена, а не целые. Я получаю вывод, как показано ниже:

Результат вывода показывает: [ Ranjit Nayak ( Attorney ), ranjti Nyak ( Case Manager ), shenoy attorney ( Parallegal ) ]

Так что мне нужно использовать какой-то метод для удаления контента, включая скобки. Пожалуйста, помогите.

В коде: CaseManagersreceivingreminders является глобальным ArrayList, у меня есть аналогичные другие ArrayList сохраненные значения. После успешного редактирования строки мне нужно сравнить оба значения массива.

Пробовал trim, replace. Ничего не работает.

    List<WebElement> PMPageCMList =
        driver.findElements(By.xpath("//div[@id='collapseCM']/div[2]/div[2]/div"));

    int totalcms = PMPageCMList.size();
    for (int i = 1; i <= totalcms; i++) {
        CaseManagersreceivingreminders.add(
            driver
                .findElement(By.xpath("//div[@id='collapseCM']/div[2]/div[2]/div" + "[" + i + "]" + "/span"))
                .getText()
        );
    }

    Collections.sort(CaseManagersreceivingreminders);
    Collections.sort(ReminderCMsList);

    try {
        boolean isEqual = CaseManagersreceivingreminders.contains(ReminderCMsList);
        System.out.println(isEqual);
        Log.pass("Data matching" + isEqual);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Я должен получить вывод как: [ Ranjit Nayak, ranjti Nyak, shenoy attorney ]

Ответы [ 4 ]

0 голосов
/ 28 июня 2019

Вы можете удалить часть (...) из каждой строки, используя следующее регулярное выражение: \s*\(.*\)

Если вы хотите обновить существующий список, вы можете использовать List.replaceAll():

Pattern pattern = Pattern.compile("\\s*\\(.*\\)");
list.replaceAll(s -> pattern.matcher(s).replaceAll(""));

В качестве альтернативы вы можете использовать потоки Java, если хотите создать новый список с результатами:

Pattern pattern = Pattern.compile("\\s*\\(.*\\)");
List<String> result = list.stream()
        .map(s -> pattern.matcher(s).replaceAll(""))
        .collect(Collectors.toList());
0 голосов
/ 27 июня 2019

Вы можете использовать регулярное выражение для удаления (...) части строки:

List<String> newList =  new ArrayList<>();

for(String s: CaseManagersreceivingreminders) {
    s = s.replaceAll("\\(.*\\)", "");
    newList.add(s);
}

System.out.println(newList);

Выход:

[Ranjit Nayak, ranjti Nyak, shenoy attorney]

О \\(.*\\) регулярное выражение:

  • \\( и \\): для любых специальных символов, таких как ( или ), вы следует использовать \\ до их совпадения.
  • .*: соответствует любому символу ноль или более раз.

Таким образом, \\(.*\\) выражение может соответствовать части строки, например ( Attorney )

0 голосов
/ 27 июня 2019

Используйте replaceAll() метод List, с подходящим UnaryOperator:

list.replaceAll(s -> s.replaceAll(" *[(].+?[)]", ""));
0 голосов
/ 27 июня 2019

Ваш Collection CaseManagersreceivingreminders представляет собой список строк, поэтому просто переберите список для каждой строки, разделенной на '(', и сохраните новые строки в новом списке.

for (String names : CaseManagersreceivingreminders) {
    CaseManagersreceivingreminders_New.add(names.split("(")[0]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...