Java-проверка, выдает ли parseInt исключение
Мне интересно, как что-то сделать, только если целое число.parseInt (что угодно) не терпит неудачу.
более конкретно у меня есть jTextArea заданных пользователем значений, разделенных разрывами строк.
Я хочу проверить каждую строку, чтобы узнать, можно ли преобразовать в int.
понял что-то вроде этого, но это не работает:
for(int i = 0; i < worlds.jTextArea1.getLineCount(); i++){
if(Integer.parseInt(worlds.jTextArea1.getText(worlds.jTextArea1.getLineStartOffset(i),worlds.jTextArea1.getLineEndOffset(i)) != (null))){}
}
любая помощь ценится.
8 ответов
public static boolean isParsable(String input){
boolean parsable = true;
try{
Integer.parseInt(input);
}catch(ParseException e){
parsable = false;
}
return parsable;
}
имейте в виду, что я имел в виду ParseException как правильный тип исключения для конкретного случая
проверьте, если это целое число parseable
public boolean isInteger(String string) {
try {
Integer.valueOf(string);
return true;
} catch (NumberFormatException e) {
return false;
}
}
или использовать сканер
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();
}
}
или использовать Регулярные Выражения как
private static Pattern doublePattern = Pattern.compile("-?\d+(\.\d*)?");
public boolean isDouble(String string) {
return doublePattern.matcher(string).matches();
}
Это было бы что-то вроде этого.
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
}
}
вы можете использовать сканер вместо try-catch:
Scanner scanner = new Scanner(line).useDelimiter("\n");
if(scanner.hasNextInt()){
System.out.println("yes, it's an int");
}
parseInt бросит NumberFormatException если он не может разобрать целое. Так что это ответит на ваш вопрос
try{
Integer.parseInt(....)
}catch(NumberFormatException e){
//couldn't parse
}
можно использовать попробовать..поймать заявление в java, чтобы захватить исключение, которое может возникнуть из Integer.parseInt().
пример:
try {
int i = Integer.parseint(stringToParse);
//parseInt succeded
} catch(Exception e)
{
//parseInt failed
}
вместо try
ing&catch
ских выражений.. лучше запустить регулярное выражение в строке, чтобы убедиться, что это допустимое число..
вы могли бы попробовать
NumberUtils.isParsable(yourInput)
является частью org/apache/commons/lang3/math/NumberUtils
и он проверяет, может ли строка быть проанализирована Integer.parseInt(String)
, Long.parseLong(String)
, Float.parseFloat(String)
или Double.parseDouble(String)
.
см. ниже: