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.
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
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];
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("*"));
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]
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(" ");
}
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:
Je ne l'utiliserais pas sauf comme hack rapide ou si je pouvais être vraiment sûr du format d'entrée.