parsestring - Java-comprobando si ParseInt lanza una excepción
parsestring java (8)
Me pregunto cómo hacer algo solo si Integer.parseInt (lo que sea) no falla.
Más específicamente, tengo un jTextArea de valores especificados por el usuario separados por saltos de línea.
Quiero comprobar cada línea para ver si se puede convertir en un int.
Imaginé algo como esto, pero no funciona:
for(int i = 0; i < worlds.jTextArea1.getLineCount(); i++){
if(Integer.parseInt(worlds.jTextArea1.getText(worlds.jTextArea1.getLineStartOffset(i),worlds.jTextArea1.getLineEndOffset(i)) != (null))){}
}
Cualquier ayuda apreciada.
Compruebe si es entero analizable
public boolean isInteger(String string) {
try {
Integer.valueOf(string);
return true;
} catch (NumberFormatException e) {
return false;
}
}
o usar un escáner
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();
}
}
o usar expresiones regulares como
private static Pattern doublePattern = Pattern.compile("-?//d+(//.//d*)?");
public boolean isDouble(String string) {
return doublePattern.matcher(string).matches();
}
Puede usar la sentencia try..catch en java, para capturar una excepción que pueda surgir de Integer.parseInt ().
Ejemplo:
try {
int i = Integer.parseint(stringToParse);
//parseInt succeded
} catch(Exception e)
{
//parseInt failed
}
Puedes usar un escáner en lugar de try-catch:
Scanner scanner = new Scanner(line).useDelimiter("/n");
if(scanner.hasNextInt()){
System.out.println("yes, it''s an int");
}
Sería algo como esto.
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
}
}
Tu podrías intentar
NumberUtils.isParsable(yourInput)
Es parte de org/apache/commons/lang3/math/NumberUtils
y comprueba si la cadena puede ser analizada por Integer.parseInt(String)
, Long.parseLong(String)
, Float.parseFloat(String)
o Double.parseDouble(String)
.
Vea abajo:
en lugar de try
y catch
expresiones ... es mejor ejecutar expresiones regulares en la cadena para asegurarse de que sea un número válido ...
parseInt lanzará NumberFormatException si no puede analizar el entero. Así que haciendo esto responderemos a tu pregunta.
try{
Integer.parseInt(....)
}catch(NumberFormatException e){
//couldn''t parse
}
public static boolean isParsable(String input){
boolean parsable = true;
try{
Integer.parseInt(input);
}catch(ParseException e){
parsable = false;
}
return parsable;
}
tenga en cuenta que quise decir ParseException como el tipo adecuado de excepción para el caso específico