web-dev-qa-db-fra.com

Java - Extraire une partie d'une chaîne entre deux caractères spéciaux

J'ai essayé de comprendre comment extraire une partie d'une chaîne entre deux caractères spéciaux "et" J'ai cherché dans l'expression régulière, mais franchement, je ne peux pas le comprendre.
Exemple en Java:

String str="21*90'89\""; 

J'aimerais retirer 89

En général, je voudrais juste savoir comment extraire une partie d'une chaîne entre deux caractères spécifiques s'il vous plaît.

Il serait également agréable de savoir comment extraire une partie de la chaîne depuis le début vers un caractère spécifique comme obtenir 21.

21
bryan

Essayez cette expression régulière:

'(.*?)"

En tant que littéral de chaîne Java Java, vous devrez l'écrire comme suit:

"'(.*?)\""

Voici un exemple plus complet montrant comment utiliser cette expression régulière avec un Matcher:

Pattern pattern = Pattern.compile("'(.*?)\"");
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
    System.out.println(matcher.group(1));
}

Voyez-le travailler en ligne: ideone

31
Mark Byers

Si vous aurez toujours une chaîne comme ça (avec 3 parties) alors cela suffit:

 String str= "21*90'89\"";
 String between = str.split("\"|'")[1];
10
Goran Jovic

Une autre option, si vous pouvez vous assurer que vos chaînes seront toujours au format que vous fournissez, vous pouvez utiliser une solution substring/indexOf rapide et sale:

str.substring(str.indexOf("'") + 1, str.indexOf("\""));

Et pour obtenir la deuxième donnée que vous avez demandée:

str.substring(0, str.indexOf("*"));
5
Rob Hruska
public static void main(final String[] args) {
    final String str = "21*90'89\"";
    final Pattern pattern = Pattern.compile("[\\*'\"]");
    final String[] result = pattern.split(str);
    System.out.println(Arrays.toString(result));
}

C'est ce que vous cherchez ... Le programme décrit ci-dessus produit:

[21, 90, 89]
4
chahuistle
    String str="abc#defg@lmn!tp?pqr*tsd";               
    String special="!?@#$%^&*()/<>{}[]:;'`~";           
    ArrayList<Integer> al=new ArrayList<Integer>();         
    for(int i=0;i<str.length();i++)
    {
        for(int j=0;j<special.length();j++)
            if(str.charAt(i)==special.charAt(j))        
                al.add(i);
    }
    for(int i=0;i<al.size()-1;i++)
    {
        int start=al.get(i);
        int end=al.get(i+1);
        for(int j=start+1;j<end;j++)
            System.out.print(str.charAt(j));
        System.out.print(" ");
    }
0
Safdar Ali Mirza

Je manque ici la solution la plus simple possible:

str.replaceFirst(".*'(.*)\".*", "$1");

Cette solution est de loin la plus courte, mais elle présente certains inconvénients:

  • Dans le cas où la chaîne semble différente, vous récupérez la chaîne entière sans avertissement.
  • Ce n'est pas très efficace, car l'expression régulière utilisée est compilée pour chaque utilisation.

Je ne l'utiliserais pas sauf comme hack rapide ou si je pouvais être vraiment sûr du format d'entrée.

0
maaartinus