2010-04-13 64 views
5

我想输入我的nirc数字,例如S1234567I然后把1234567 individualy作为整数indiv1charAt(1)indiv2charAt(2)indivcharAt(3)等。然而,当我使用下面的代码,我似乎无法得到,甚至第一个数字呢?任何想法?Java:charAt转换为int?

Scanner console = new Scanner(System.in); 
    System.out.println("Enter your NRIC number: "); 

    String nric = console.nextLine(); 

    int indiv1 = nric.charAt(1); 
    System.out.println(indiv1); 

回答

15

你会得到49,50,51等出来 - 这些都是为人物 '1', '2', '3' 等

如果知道Unicode码点,他们将西方的数字,你可以只减去“0”:

int indiv1 = nric.charAt(1) - '0'; 

但是,你只能这样做后,你已经在别处验证该字符串格式是正确的 - 否则你”最终会出现虚假数据 - 例如,'A'最终会返回17而不是导致错误。

当然,其中一种方法是取值,然后检查结果是否在0-9范围内。另一种方法是使用:

int indiv1 = Character.digit(nric.charAt(1), 10); 

如果字符不是合适的数字,则返回-1。

我不确定这后一种方法是否会覆盖非西方数字 - 第一个数字肯定不会 - 但听起来这不会成为您的问题。

-1

int indiv1 = Integer.parseInt(nric.charAt(1));

+1

的Integer.parseInt需要一个字符串,而不是一个字符。 – 2010-04-13 06:30:44

+0

heh oops Integer.parseInt(Character.toString(nric.charAt(1))); :P 或 Integer.parseInt(nric.substr(1,1)); 但严重的是,只要跟Jon Skeet的答案一起去。 – jonathanasdf 2010-04-13 06:49:35

0
try { 
    int indiv1 = Integer.parseInt ("" + nric.charAt(1)); 
    System.out.println(indiv1); 
} catch (NumberFormatException npe) { 
    handleException (npe); 
} 
0

我知道问题是关于字符为int但值得一提的,因为在焦炭负太))

从JavaHungry如果你不瓦纳使用字符必须注意的整数 负数。

字符串转换为整数:伪码

1. Start number at 0 

    2. If the first character is '-' 
        Set the negative flag 
        Start scanning with the next character 
      For each character in the string 
        Multiply number by 10 
        Add(digit number - '0') to number 
      If negative flag set 
        Negate number 
        Return number 

公共类StringtoInt {

public static void main (String args[]) 
{ 
    String convertingString="123456"; 
    System.out.println("String Before Conversion : "+ convertingString); 
    int output= stringToint(convertingString); 
    System.out.println(""); 
    System.out.println(""); 
    System.out.println("int value as output "+ output); 
    System.out.println(""); 
} 




    public static int stringToint(String str){ 
     int i = 0, number = 0; 
     boolean isNegative = false; 
     int len = str.length(); 
     if(str.charAt(0) == '-'){ 
      isNegative = true; 
      i = 1; 
     } 
     while(i < len){ 
      number *= 10; 
      number += (str.charAt(i++) - '0'); 
     } 
     if(isNegative) 
     number = -number; 
     return number; 
    } 
}