Question

Je le code suivant pour analyser une variable de chaîne appelée str.

NumberFormat formatter = NumberFormat.getInstance();
Number number = formatter.parse(str);

Je veux attraper l'exception lancée quand str est pas un nombre juste pour le valider. Le problème, c'est qu'il does't jette toujours le ParseException attendu. Lorsque la chaîne str commence par un nombre mais sont des caractères, il semble avoir un des premiers caractères de la chaîne et les analyser comme un nombre.

Par exemple:

  • si str = "a10" est alors jeté un ParseException
  • si str = "10a", alors pas d'exception levée et numéro = 10

Je ne peux pas utiliser Double.parseDouble (str) car str peut avoir des virgules et des points comme 1,000.98 et ce format ne soit pas compris par cette méthode.

Pourquoi est-ce qui se passe? Puis-je valider toute autre manière? Merci

Était-ce utile?

La solution

Le comportement est pas étrange, il est conçu comme

  

Parse texte à partir du début de la chaîne donnée pour produire un nombre. La méthode ne peut pas utiliser le texte intégral de la chaîne donnée.

Vous pouvez utiliser la méthode d'analyse de position consciente comme ceci:

public static double parse(String str) throws ParseException {
  NumberFormat formatter = NumberFormat.getInstance();
  ParsePosition position = new ParsePosition(0);
  Number number = formatter.parse(str, position);
  if (position.getIndex() != str.length()) {
    throw new ParseException("failed to parse entire string: " + str, position.getIndex());
  }
  return number.doubleValue();
} 

Autres conseils

Si vous regardez le API , il est dit clairement:

  

parse texte depuis le début de la   étant donné la chaîne pour produire un nombre. le   méthode ne peut pas utiliser l'intégralité du texte   la chaîne donnée.

Si vous voulez voir dans quelle mesure l'analyseur analysé, vous pouvez utiliser le autre mode de position courant . De cette façon, vous pouvez vérifier si vous avez des caractères arrière. Vous pouvez également vérifier l'ensemble de la chaîne de caractères alphanumériques à l'aide par exemple Langs communs isAlpha .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top