[JAVA] Distinguer les entiers et les fractions avec des expressions régulières

Un mémorandum lors de l'évaluation de l'entier / fraction d'une chaîne de caractères en Java

Chose que tu veux faire

Je souhaite traiter une chaîne de caractères composée uniquement de nombres et de points décimaux comme positive. (Hors notation d'index, etc.) La méthode Double.parsedouble (str) analyse la notation exponentielle `2.4e + 8```,` NaNetInfinity```, c'est donc une expression régulière J'ai fait un jugement.

Conditions préalables

jdk1.8.0_40

résultat

^-?(0|[1-9]\d*)(\.\d+|)$

tester

Code de test


List<String> targets = Arrays.asList("0","-0","0.8","0.878","1","-1","1.1",
    "1.123","544","42.195","000","000.0","2.4e+8","3.1e-2","-6.75e-7",
    "0X02.Bp-1","1.","155.","000.0","-0.","-0000.","0x07","A","1",
    "-","NaN","Infinity","-Infinity");
String regex = "^-?(0|[1-9]\\d*)(\\.\\d+|)$";
Pattern p = Pattern.compile(regex);
for(String s : targets){
  Matcher matcher = p.matcher(s);
  if(matcher.matches())
    System.out.println("match! : " + s);
  else
    System.out.println("N'est pas applicable: " + s);
}

La cible de test est appropriée.

result


match! : 0
match! : -0
match! : 0.8
match! : 0.878
match! : 1
match! : -1
match! : 1.1
match! : 1.123
match! : 544
match! : 42.195
N'est pas applicable: 000
N'est pas applicable: 000.0
N'est pas applicable: 2.4e+8
N'est pas applicable: 3.1e-2
N'est pas applicable: -6.75e-7
N'est pas applicable: 0X02.Bp-1
N'est pas applicable: 1.
N'est pas applicable: 155.
N'est pas applicable: 000.0
N'est pas applicable: -0.
N'est pas applicable: -0000.
N'est pas applicable: 0x07
N'est pas applicable: A
N'est pas applicable: 1
N'est pas applicable: -
N'est pas applicable: NaN
N'est pas applicable: Infinity
N'est pas applicable: -Infinity

Recommended Posts

Distinguer les entiers et les fractions avec des expressions régulières
Changer de beans avec les expressions canoniques @ConditionalOnExpression et SpEL
Analyser les adresses japonaises avec des expressions régulières
Expressions régulières
Distinguer le polymorphisme à l'exécution et à la compilation
Facile à parcourir avec les expressions régulières Java
Distinguer les nombres positifs et négatifs en Java
[Swift] NS Predicate ne peut pas faire la distinction entre pleine largeur et demi-largeur
[RSpec] WebMock gère les expressions régulières et les chaînes de requête Array
Méditez la querelle entre Power Mock et Jacoco avec Gradle