web-dev-qa-db-fra.com

Java - vérifier si parseInt lève une exception

Je me demande comment faire quelque chose uniquement si Integer.parseInt (peu importe) n'échoue pas.

Plus précisément, j'ai un jTextArea de valeurs spécifiées par l'utilisateur séparées par des sauts de ligne.

Je veux vérifier chaque ligne pour voir si elle peut être convertie en int.

Imaginé quelque chose comme ça, mais cela ne fonctionne pas:

for(int i = 0; i < worlds.jTextArea1.getLineCount(); i++){
                    if(Integer.parseInt(worlds.jTextArea1.getText(worlds.jTextArea1.getLineStartOffset(i),worlds.jTextArea1.getLineEndOffset(i)) != (null))){}
 }

Toute aide appréciée.

31
Mike Haye
public static boolean isParsable(String input){
    try{
        Integer.parseInt(input);
        return true;
    }catch(ParseException e){
        return false;
    }
}
51
fmucar

Vérifiez si c'est analysable en entier

public boolean isInteger(String string) {
    try {
        Integer.valueOf(string);
        return true;
    } catch (NumberFormatException e) {
        return false;
    }
}

ou utilisez Scanner

Scanner scanner = new Scanner("Test string: 12.3 dog 12345 cat 1.2E-3");

while (scanner.hasNext()) {
    if (scanner.hasNextDouble()) {
        Double doubleValue = scanner.nextDouble();
    } else {
        String stringValue = scanner.next();
    }
}

ou utilisez Expression régulière comme

private static Pattern doublePattern = Pattern.compile("-?\\d+(\\.\\d*)?");

public boolean isDouble(String string) {
    return doublePattern.matcher(string).matches();
}
26
Kerem Baydoğan

Ce serait quelque chose comme ça.

String text = textArea.getText();
Scanner reader = new Scanner(text).useDelimiter("\n");
while(reader.hasNext())
    String line = reader.next();

    try{
        Integer.parseInt(line);
        //it worked
    }
    catch(NumberFormatException e){
       //it failed
    }
}
11
Stefan Bossbaly

parseInt lèvera NumberFormatException s'il ne peut pas analyser l'entier. Donc, cela répondra à votre question

try{
Integer.parseInt(....)
}catch(NumberFormatException e){
//couldn't parse
}
9
Amir Raminfar

Vous pouvez utiliser un scanner au lieu de try-catch:

Scanner scanner = new Scanner(line).useDelimiter("\n");
if(scanner.hasNextInt()){
    System.out.println("yes, it's an int");
}
8
dogbane

au lieu de trying & catching expressions .. il vaut mieux exécuter regex sur la chaîne pour s'assurer qu'il s'agit d'un nombre valide ..

3
Anantha Sharma

Tu pourrais essayer

NumberUtils.isParsable(yourInput)

Il fait partie de org/Apache/commons/lang3/math/NumberUtils Et vérifie si la chaîne peut être analysée par Integer.parseInt(String), Long.parseLong(String), Float.parseFloat(String) ou Double.parseDouble(String).

Voir ci-dessous:

https://commons.Apache.org/proper/commons-lang/apidocs/org/Apache/commons/lang3/math/NumberUtils.html#isParsable-Java.lang.String-

2
Siddhartha Ghosh

Vous pouvez utiliser instruction try..catch en Java, pour capturer une exception pouvant survenir à partir de Integer.parseInt ().

Exemple:

try {
  int i = Integer.parseint(stringToParse);
  //parseInt succeded
} catch(Exception e)
{
   //parseInt failed
}
2
Yet Another Geek