2012-01-16 19 views
6

Tôi đang cố gắng phân tích cú pháp int từ phần tử mảng String. Đây là mã của tôi:Kiểm tra độ phân giải của Java ParseInt

String length = messageContents[k].replace("Content-Length:", "").replace(" ", ""); 
System.out.println("Length is: " + length); 
int test= Integer.parseInt(length); 

Các System.out.println trả về như sau: Chiều dài là: 23

Tuy nhiên, khi tôi cố gắng phân tích String thành một int, một java.lang.NumberFormatException bị ném;

java.lang.NumberFormatException: For input string: "23" 

Tôi hơi bối rối cách 23 không được phân tích cú pháp thành int. Tôi chỉ có thể giả định rằng có một số nhân vật khác trong đó ngăn cản nó, nhưng tôi không thể nhìn thấy nó cho cuộc sống của tôi.

Mọi đề xuất?

Cảm ơn

Cập nhật

Despite the String length having only two characters, Java reports its length as three: 
Length is: '23' 
Length of length variable is: 3 
length.getBytes = [[email protected] 
+0

Tôi nhận thấy rằng bạn có một dấu trên dòng đầu tiên. Có lẽ một lỗi quá khứ sao chép? –

+0

Ahh có, bỏ qua điều đó. Sao chép và dán lỗi thực sự. Cảm ơn :) – Tony

+4

* "Tôi chỉ có thể giả định rằng có một số nhân vật khác trong đó đang ngăn chặn nó, nhưng tôi không thể nhìn thấy nó cho cuộc sống của tôi." * 1) Đính kèm dấu nháy đơn xung quanh giá trị trong 'println 'tuyên bố. 2) 'System.out.println (" Phần chuỗi này dài bao lâu? "+ Length.length());' –

Trả lời

7

Hãy thử phiên bản này: ""

int test= Integer.parseInt(length.trim()); 
+2

Điều đó đã sắp xếp nó, cảm ơn rất nhiều! Tôi giả định rằng byte 13 được tính là khoảng trắng bởi phần cắt? – Tony

+0

Không chắc chắn. Nhưng 'trim()' sẽ loại bỏ hầu hết mọi thứ trong một 'Chuỗi' không hiển thị. –

3

Có thể có nhân vật vô hình trong chuỗi này.

Ý tưởng của tôi: sử dụng regex với Mẫu/Đối sánh để xóa tất cả các số không trong chuỗi của bạn, sau đó phân tích cú pháp nó.

+0

Thông thường tôi sẽ làm như vậy. Nhưng vấn đề này đã khiến tôi rất quan tâm đến việc tìm ra lý do tại sao nhân vật phụ, bất kể nó có thể là gì, không xuất hiện trong System.Out. – Tony

+1

Nó có thể là một trong những ký tự điều khiển không in được mà bạn chỉ có thể tìm thấy bằng cách phát hành 'System.out.println (Arrays.toString (length.getBytes())); ' – anubhava

+0

[50, 51, 13] - Tôi nghĩ 13 là một vận chuyển trở lại? – Tony

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