1
votes

Regex pour supprimer tous les caractères après l'espace // Android Java

J'essaye de convertir la chaîne suivante 1.00 h. en 1.00 avec RegEx mais je suis nouveau avec elle et j'ai besoin de votre aide. J'ai essayé ce qui suit

seanceLengthValue = Integer.parseInt(
currentService.getSeanceLength().replaceAll("\\D\\w+",""));


2 commentaires

convertir la chaîne suivante "1,00 h". à 1.00 avec RegEx -> Même si vous obtenez 1.00, cela ne fonctionnera toujours pas. Impossible d'analyser 1.00 en int.


@Evgeny Ladyzhenskiy: Une réponse a-t-elle fonctionné pour vous? Si oui, envisagez de les accepter / de les voter. Que dois-je faire lorsque quelqu'un répond à ma question?


4 Réponses :


1
votes

Il suffit de faire correspondre / conserver / capturer les premiers caractères non blancs et d'ancrer l'expression au début:

^(\S+)

Voir une démo sur regex101.com (en Java vous devez échapper les barres obliques inverses pour qu'il devienne ^ (\\ S +) effectivement).


0 commentaires

0
votes

Essayez ce modèle: (\d*\.\d+|\d+)

Il utilise l'alternance pour vous permettre de faire correspondre différents types de formats de nombres décimaux:

\ d * \. \ d + correspondra à zéro ou plusieurs chiffres \ d , point littéralement \. puis un ou plusieurs chiffres \ d + , donc il correspondra à 1.0, .01, etc.

\ d + - correspond à un ou plusieurs chiffres, au cas où il y aurait un séparateur décimal.

Démo


0 commentaires

1
votes

Vous pouvez simplement utiliser:

seanceLengthValue = Double.parseDouble(
            currentService.getSeanceLength().replaceAll(" [a-zA-Z]", "");

Ici, nous remplaçons toutes les occurrences d'alphabets et d'espaces par "" . De plus, comme la chaîne résultante sera un double , vous devez utiliser Double.parseDouble () pour la conversion.


0 commentaires

1
votes

Voici comment vous pouvez le faire

seanceLengthValue = Float.parseFloat(m.group(0)); 

Cela vous donnerait tout ce qui est avant les espaces.

Maintenant, lorsque vous analysez, il doit être analysé dans float ou double parce qu'il a une valeur en virgule flottante.

String str = "1.00 h";
Pattern p = Pattern.compile("^(\\S+)");
Matcher m = p.matcher(str);
m.find();
Log.i("Findings", "value is >>" + m.group(0) + "<<");

Remarque: En cas d'espaces multiples, il donnerait toujours la première occurrence uniquement.

par exemple; Si la chaîne est "1,00 h 2,00 f"; cela donnerait "1,00" seulement.


0 commentaires