Un mémorandum lors de l'évaluation de l'entier / fraction d'une chaîne de caractères en Java
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```,`
NaNet
Infinity```, c'est donc une expression régulière J'ai fait un jugement.
jdk1.8.0_40
^-?(0|[1-9]\d*)(\.\d+|)$
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