Java-检查parseInt是否引发异常

Java-检查parseInt是否引发异常,java,string,jtextarea,parseint,Java,String,Jtextarea,Parseint,我想知道只有在Integer.parseInt(无论什么)没有失败的情况下,如何做一些事情 更具体地说,我有一个用户指定值的jTextArea,由换行符分隔 我想检查每一行,看看是否可以转换为int 我想是这样的,但不起作用: for(int i = 0; i < worlds.jTextArea1.getLineCount(); i++){ if(Integer.parseInt(worlds.jTextArea1.getText(worlds.j

我想知道只有在Integer.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))){}
 }
for(int i=0;i
非常感谢您的帮助。

如果无法解析整数,parseInt将抛出。这样做可以回答你的问题

public static boolean isParsable(String input) {
    try {
        Integer.parseInt(input);
        return true;
    } catch (final NumberFormatException e) {
        return false;
    }
}
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
}

应该是这样的

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
    }
}

检查它是否是可解析的整数

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();
}

而不是
尝试
ing&
catch
ing表达式。。最好在字符串上运行regex,以确保它是一个有效的数字

您可以使用扫描仪而不是try catch:

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

NumberUtils.isParsable(yourInput)
它是
org/apache/commons/lang3/math/NumberUtils
的一部分,它检查字符串是否可以被
Integer.parseInt(string)
Long.parseLong(string)
Float.parseFloat(string)
Double.parseDouble(string)
解析

见下文:


只需处理
NumberFormatException
。的可能重复项不会捕获所有异常。这真是糟糕的做法。数字格式异常。你还是把它做好为好。它是有文档记录的。这只适用于此特定的try/catch语句或任何其他NumberFormatException。“不要捕获所有异常。这是非常糟糕的做法。”在这种情况下,这是完全正确的,也是正确的做法,因为您所做的只是检查是否有任何错误。捕获所有异常并记录它们。捕获所有异常从来都不是正确的做法,因为这里预期的唯一异常是由parseInt引发的异常。如果还有什么地方出了问题,你可能不希望程序继续运行(比如说,因为有人干扰了反射,所以出现了一个非法的AccessException),为什么要投否决票?这是一个有效的答案,尽管异常捕获对于良好实践来说过于模糊,但它会起作用。@josh.trow,在执行parseint时引发异常也是一种不好的实践,因为它确实不是真正的异常,可以提供一个可解析的方法(检查是否可以解析),或者将其转换为一个奇怪的值(如Ruby和perl)那么,异常是为了什么?更好的方法?为什么要重新发明轮子?为什么要冒regex与parseInt()不匹配的风险?为什么要浪费时间和金钱?当出现异常时,有一个开销(对于JVM)来准备堆栈跟踪,然后继续执行程序(这有点耗时)…在解析表达式之前检查它总是更好的..开销是微不足道的,我提出的其他问题不是。你的总括声明是不可支持的。7年后,没有人注意到这一点-指责“总括声明”是没有帮助的。如果性能至关重要,那么就有必要运行compa这两种技术的优点。无论是准备正则表达式还是堆栈跟踪都是完全可以忽略的。事实上,正则表达式可以被缓存。+1用于使用扫描仪进行验证,没有例外。这应该是正确的答案,因为接受的答案是错误的。