1
votes

Comment supprimer une chaîne spécifique stockée dans une ArrayList

J'ai un code qui stocke les valeurs pour une utilisation ultérieure. Mais j'ai besoin de trouver les noms exacts et non le tout. Je reçois une sortie comme ci-dessous:

Le résultat de la sortie montre: [Ranjit Nayak (avocat), ranjti Nyak (gestionnaire de cas), avocat shenoy (Parallegal)]

Donc je besoin d'utiliser une méthode pour supprimer le contenu, y compris les crochets. Veuillez aider.

Dans le code: CaseManagersreceivingreminders est une ArrayList globale, j'ai une autre ArrayList valeurs stockées similaires. Une fois que la chaîne est modifiée avec succès, je dois comparer les deux valeurs du tableau.

J'ai essayé de trim , replace . Rien ne fonctionne.

    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();
    }

Je devrais obtenir le résultat comme: [Ranjit Nayak, ranjti Nyak, shenoy attorney]


4 commentaires

puis vous devez parcourir chaque élément du tableau et remplacer l'élément par l'élément modifié. Où est le problème maintenant? Ou créez simplement un nouveau tableau basé sur les nouveaux éléments, peu importe ici pour les petits tableaux


Exemple de code @AKSW s'il vous plaît!


Comment split () et trim () peuvent-ils être liés à Selenium? Est-ce que je manque quelque chose?


Vous devez vous en tenir aux conventions de nommage Java: les noms de variables sont toujours écrits dans camelCase.


4 Réponses :


0
votes

Votre Collection CaseManagersreceivingreminders est une liste de chaînes, il suffit donc de parcourir la liste, pour chaque chaîne divisée sur '(' et d'enregistrer les nouvelles chaînes dans une nouvelle liste.

for (String names : CaseManagersreceivingreminders) {
    CaseManagersreceivingreminders_New.add(names.split("(")[0]);
}


2 commentaires

mais cela ne supprimera que le 1er (, qu'en est-il du contenu à l'intérieur du support?


@ranjitnayak "Ranjit Nayak (avocat)". split ("(") divisera la chaîne en deux chaînes "Ranjit Nayak" et "avocat)". En savoir plus sur la méthode split () ici - docs.oracle.com/javase/7/docs/api/java/lang/...



1
votes

Vous pouvez utiliser regex pour supprimer la partie (...) de la chaîne:

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

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

System.out.println(newList);

Sortie:

[ Ranjit Nayak, ranjti Nyak, procureur shenoy]

À propos de \\ (. * \\) regex:

  • \\ ( et \\) : pour tout caractère spécial comme ( ou ) vous doivent utiliser \\ avant eux pour correspondre.
  • . * : correspond à un caractère zéro ou plusieurs fois.

Ainsi l'expression \\ (. * \\) peut correspondre à une partie d'une chaîne comme (Avocat)


0 commentaires

0
votes

Utilisez le replaceAll () méthode de List , avec un UnaryOperator :

list.replaceAll(s -> s.replaceAll(" *[(].+?[)]", ""));


0 commentaires

0
votes

Vous pouvez supprimer la partie (...) de chaque chaîne à l'aide de l'expression régulière suivante: \s*\(.*\)

Si vous le souhaitez pour mettre à jour la liste existante, vous pouvez utiliser List.replaceAll():

Pattern pattern = Pattern.compile("\\s*\\(.*\\)");
List<String> result = list.stream()
        .map(s -> pattern.matcher(s).replaceAll(""))
        .collect(Collectors.toList());

Vous pouvez également utiliser Java Streams si vous souhaitez créer une nouvelle liste avec les résultats:

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


0 commentaires