36

我想知道只有在 Integer.parseInt(whatever) 没有失败的情况下如何做某事。

更具体地说,我有一个由换行符分隔的用户指定值的 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))){}
 }

任何帮助表示赞赏。

4

8 回答 8

56
public static boolean isParsable(String input) {
    try {
        Integer.parseInt(input);
        return true;
    } catch (final NumberFormatException e) {
        return false;
    }
}
于 2011-06-23T15:05:50.137 回答
28

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

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();
}
于 2011-06-23T15:09:47.987 回答
12

会是这样的。

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
    }
}
于 2011-06-23T15:07:28.270 回答
10

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

try{
Integer.parseInt(....)
}catch(NumberFormatException e){
//couldn't parse
}
于 2011-06-23T15:06:04.740 回答
8

您可以使用扫描仪代替 try-catch:

Scanner scanner = new Scanner(line).useDelimiter("\n");
if(scanner.hasNextInt()){
    System.out.println("yes, it's an int");
}
于 2011-06-23T15:17:05.450 回答
2

而不是trying & catching 表达式.. 最好在字符串上运行正则表达式以确保它是有效数字..

于 2011-06-23T15:11:21.983 回答
2

您可以在 java 中使用try..catch 语句来捕获可能由 Integer.parseInt() 引起的异常。

例子:

try {
  int i = Integer.parseint(stringToParse);
  //parseInt succeded
} catch(Exception e)
{
   //parseInt failed
}
于 2011-06-23T15:06:53.250 回答
2

你可以试试

NumberUtils.isParsable(yourInput)

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

见下文:

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

于 2018-01-12T05:44:53.853 回答