2011-03-05 19 views
4

我创建一个批处理程序,读取包含Java初学者有麻烦使用的Integer.parseInt用于将字符串转换成整数

信用卡号码外部输入文件,然后总结数字(从右到左) ,从

最后一位数字并跳过其他数字。我必须将输入视为字符串,而不是

数字。我的代码看起来像:

  int oddSum = 0, digit = 0; 
      for(int odd = (cardNumber.length() - 1); odd >= 0; odd = odd - 2) 
      { 
       digit = Integer.parseInt(cardNumber); 
       oddSum += digit; 
      } 

但是,字符串cardNumber是整个字符串,而我只需要单个数字。说:

  cardNumber = "4388576018402626"; 

我怎么可以,让我们说,“6”,变成一个整数?

回答

1

你应该遍历字符串,就好像它是一个单独的字符数组;使用cardNumber.toCharArray()

int oddSum = 0, digit = 0; 
char[] cardNumberDigits = cardNumber.toCharArray(); 
for(int odd = cardNumberDigits.length - 1; odd >= 0; odd = odd - 2) { 
    digit = Integer.parseInt(String.valueOf(cardNumberDigits[odd])); 
    oddSum += digit; 
} 
+0

但后来我如何才能炭从数组变成一个整数? – tscudder16 2011-03-05 03:41:26

+0

使用'String.valueOf'或'Character.toString'将char转换为String,然后使用'Integer.parseInt'。关键是让你的代码干净地阅读。 – ide 2011-03-05 03:45:21

0

charAt()访问器方法允许您在索引处获取单个字符。

3

你甚至都不需要解析任何东西,如果你只需要一次治疗一个数字:

String cardNumber = "4388576018402626"; 
int d = cardNumber.charAt(0) - '0'; // = 4 

但是,如果你坚持要用Integer.parseInt(),使用String。 substring(begin, end)方法:

int d = Integer.parseInt(cardNumber.substring(0, 1)); // = 4 

** UPDATE **

或许这更好的解决方案:

char[] chars = cardNumber.toCharArray(); 
int oddSum = 0, digit = 0, len = chars.length - 1; 
for(int odd = len; odd >= 0; odd -= 2) 
{ 
    if (Character.isDigit(chars[odd])) { 
     digit = Character.getNumericValue(chars[odd]); 
     oddSum += digit; 
    } //else { 
     // do something... throw an exception, whatever here 
    //} 
} 
+1

坚持'parseInt'有一定的价值。如果'cardNumber'恰好包含除了十进制数字之外的东西,'parseInt'将会抛出一个异常,而上面的字符编码hack只会默默地产生垃圾。 – rlibby 2011-03-05 03:45:05

+1

@rlibby,如果可能的话,我不太想用try..catch块进行简单验证。例如,使用charAt(i) - '0'应该产生一个介于0和9之间的值;任何其他值应视为无效输入字符。没有必要为此抛出异常。另外,charAt()方法比使用substring()和parseInt()...还是最差!使用pasreInt(Stirng.valueOf(char))!! – 2011-03-05 03:47:26

+0

@Yanick Rochon,'parseInt'例外引发('java.lang.NumberFormatException')异常,是的,这是一个速度安全性的折衷。 – rlibby 2011-03-05 03:53:38

2

我怎样才能得到,让我们说 “6”,变成一个整数?

Integer.parseInt("6"); 

但字符串cardNumber是整个字符串,而我需要的只是个位数。

所以后来只得到一个数字:

String cardNumber = "4388576018402626"; 
String digit = cardNumber.substring(i, i + 1); 
0

你需要抓住cardNumber

的一个子
String cardNumber = "4388576018402626"; 
int start = cardNumber.length()-2; 
int end = cardNumber.length()-1; 
String subString = cardNumber.substring(start, end); 
int numberSix = Integer.parseInt(subString); 
相关问题