2013-10-15 13 views
52

Có thể ai đó xin vui lòng giải thích cho tôi những gì đang xảy ra ở đây:Chuyển đổi ký tự để nguyên trong Java

char c = '+'; 
int i = (int)c; 
System.out.println("i: " + i + " ch: " + Character.getNumericValue(c)); 

này in i: 43 ch:-1. Điều đó có nghĩa là tôi phải dựa vào các chuyển đổi nguyên thủy để chuyển đổi char thành int? Vậy làm cách nào tôi có thể chuyển đổi một số Character thành Integer?

Chỉnh sửa: Có Tôi biết Character.getNumericValue trả về -1 nếu đó không phải là giá trị số và điều đó hợp lý với tôi. Câu hỏi đặt ra là: tại sao việc chuyển đổi nguyên thủy trả về 43?

Edit2:43 là ASCII cho +, nhưng tôi hy vọng các diễn viên không thành công giống như getNumericValue đã không thành công. Nếu không, điều đó có nghĩa là có hai cách tương đương ngữ nghĩa để thực hiện cùng một thao tác nhưng với các kết quả khác nhau?

+1

đã bạn mong đợi gì để có được thay vì '43'? –

+4

Tôi không nghĩ rằng 'getNumericValue' làm những gì bạn nghĩ rằng nó làm. Đó là một phương thức tiện ích chuyển đổi các ký tự thành số nguyên (như trong ký tự '5' thành số nguyên 5). Điều đó không giống như một diễn viên (mà chuyển đổi ký tự '5' thành số nguyên 53). – Aurand

+0

Vấn đề là việc truyền không trả lại giá trị số của chữ số. Hai hoạt động đó làm hai việc khác nhau. – SLaks

Trả lời

38

Vì tài liệu nêu rõ, Character.getNumericValue() trả về giá trị của ký tự dưới dạng chữ số.
Nó trả về -1 nếu ký tự không phải là chữ số.

Nếu bạn muốn để có được điểm số mã Unicode của một đối tượng đóng hộp Character, bạn sẽ cần phải Unbox nó đầu tiên:

int value = (int)c.charValue(); 
+5

Bạn có thể muốn liên kết đến tài liệu đó: http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#getNumericValue%28char%29 –

2

Từ Javadoc cho Character#getNumericValue:

Nếu ký tự không có giá trị số, sau đó -1 được trả về. Nếu ký tự có giá trị số không thể được biểu diễn dưới dạng số nguyên không âm(ví dụ: giá trị phân số), thì -2 là được trả lại.

Ký tự + không có giá trị số, vì vậy bạn nhận được -1.

Cập nhật:

Lý do mà chuyển đổi nguyên thủy là đem lại cho bạn 43 là các nhân vật '+' được mã hóa như là số nguyên 43.

77
Character.getNumericValue(c) 

Các java.lang.Character.getNumericValue(char ch) trả về giá trị int rằng quy định Ký tự Unicode đại diện. Ví dụ, nhân vật '\u216C' (các chữ số la mã năm mươi) sẽ trả về một int với giá trị là 50.

Các chữ AZ trong hoa của họ ('\u0041' through '\u005A'), chữ thường ('\u0061' through '\u007A'), và biến toàn bộ chiều rộng ('\uFF21' through '\uFF3A' and '\uFF41' through '\uFF5A') hình thức có giá trị số từ 10 đến 35 Điều này độc lập với đặc tả Unicode, không gán giá trị số cho các giá trị char này.

Phương thức này trả về giá trị số của ký tự, dưới dạng giá trị int không âm;

-2 nếu ký tự có giá trị số không phải là số nguyên không âm;

-1 nếu ký tự không có giá trị số.

here là liên kết.

32

Hãy thử một trong các cách bên dưới. Những nên làm việc:

int a = Character.getNumericValue('3'); 
int a = Integer.parseInt(String.valueOf('3'); 
1
public class IntergerParser { 

public static void main(String[] args){ 
String number = "+123123"; 
System.out.println(parseInt(number)); 
} 

private static int parseInt(String number){ 
    char[] numChar = number.toCharArray(); 
    int intValue = 0; 
    int decimal = 1; 
    for(int index = numChar.length ; index > 0 ; index --){ 
     if(index == 1){ 
      if(numChar[index - 1] == '-'){ 
       return intValue * -1; 
      } else if(numChar[index - 1] == '+'){ 
       return intValue; 
      } 
     } 
     intValue = intValue + (((int)numChar[index-1] - 48) * (decimal)); 
     System.out.println((int)numChar[index-1] - 48+ " " + (decimal)); 
     decimal = decimal * 10; 
    } 
    return intValue; 
} 
Các vấn đề liên quan