如何在Java中解决NumberFormatException?

时间:2016-02-25 07:26:23

标签: java numberformatexception

import java.util.*;
import java.lang.*;
import java.io.*;

class Main {
    public static void main(String[] args) throws IOException {
        try {

            BufferedReader red = new BufferedReader(new InputStreamReader(System.in));
            String s = red.readLine();
            int t = 0;
            int l = 0;
            int c = 0;
            t = Integer.valueOf(red.readLine());
            for (int i = 0; i < t; i++) {
                l = Integer.valueOf(red.readLine());
                c = Integer.valueOf(red.readLine());
                for (int j = 1; j <= l; j++) {
                    for (int k = 1; k <= c; k++) {
                        if (j == 1 || j == l || k == 1 || k == c) {
                            System.out.print("*");
                        } else {
                            System.out.print(".");
                        }
                    }
                    System.out.println();
                }
            }
            l = 0;
            c = 0;
            t = 0;

            red.close();

        } catch (NumberFormatException e) {
            System.out.println(e);
        }
    }
}

这是错误:

  

java.lang.NumberFormatException:对于输入字符串:“3 1”

我认为输入不正确,因此无法转换为int,但我无法解决此问题。很多时候,如果我不使用try-catch块,我会收到错误。

2 个答案:

答案 0 :(得分:0)

我想你想要这个:

l = red.nextInt(); // straight to int
c = red.nextInt(); // ditto
red.nextLine();  // to clear the newline from the buffer

如果当前输入行为"3 1",则l将分配3c 1

请注意,尽管此代码可能有用,但它很脆弱;您可能希望添加代码以防止错误数据。

答案 1 :(得分:0)

您可以在输入行上使用String.split等函数根据分隔符(此处为空格)剪切它:

String line = "  test  ";
line = line.trim(); // "test"

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)

另一个有用的方法是String.trim()从String的开头和结尾删除blanck caracters。

typedef void (^PDFCMapParserHandler)(NSArray *lines);

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim()

另一点是你可以只在Integer.parseInt()调用周围编写try / catch块,而不是完整的循环: 这样您就会出现基于错误行的错误而不会停止整个过程。但这是关于你的错误处理:如果输入只包含一个&#34;坏的特征&#34; (即:&#39; a&#39;),您是要错误地停止整个过程,还是只记录一条消息并继续。