2017-11-08 45 views
5

Tại sao một chuỗi số thực được đọc từ một văn bản không thể được phân tích cú pháp với phương thức Integer.valueOf() trong java?Tại sao một chuỗi số thực tế được đọc từ một văn bản không thể được phân tích cú pháp bằng phương thức Integer.valueOf() trong java?

Exception:

Exception in thread "main" java.lang.NumberFormatException: For input string: "11127" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:580) 
    at java.lang.Integer.valueOf(Integer.java:766) 
    at sharingBike.ReadTxt.readRecord(ReadTxt.java:91) 
    at sharingBike.ReadTxt.main(ReadTxt.java:17) 

Đây là mã của tôi

 File fileView = new File(filePath); 

     BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(fileView), "UTF-8")); 

     String line; 

     int count = 0; 
     while ((line = in.readLine()) != null) { 
      String[] lins = line.split(";"); 

      int value; 
      value = Integer.valueOf(lins[0]);} 
+0

'valueOf' trả về một đối tượng kiểu' Integer', không một nguyên thủy. Sử dụng 'parseInt' để thay thế. –

+1

mã của bạn nên hoạt động, tùy chọn duy nhất tôi có thể tưởng tượng là bạn có dấu cách trong giá trị chuỗi/số nguyên mà bạn đang cố phân tích ... –

+0

@ ØyvindHauge: 'public static int parseInt (String s)'? – Stefan

Trả lời

12

Dưới đây là nội dung của chuỗi của bạn:

System.out.println(Arrays.toString("11127".getBytes())); 

mà kết quả đầu ra:

[-17, -69, -65, 49, 49, 49, 50, 55]

Ba byte đầu tiên là a UTF-8 BOM.

Bạn có thể sửa chữa nó bằng cách loại bỏ phi chữ số từ chuỗi đầu tiên (và sử dụng parseInt để trả lại một int thay vì một Integer):

int value = Integer.parseInt(lins[0].replaceAll("\\D", ""); 
+1

thích hợp cho UTF-BOM –

+0

Tôi thực sự không ngờ rằng vấn đề này rất lạ trong mắt tôi, nhưng vẫn có thể có câu trả lời chính xác để sovle nó một cách nhanh chóng! StackOverFlow là mạnh mẽ, tôi biết nó ngay bây giờ. HAHA –

Các vấn đề liên quan