2011-03-02 159 views
1

例子:如何从一串数字中提取单个数字?

String number = "123456789"; 

如何通过自身存储的倒数第二位的int型变量?

详细:

for (int i = number.length()-2; i>-1; i-=2) 
    int x = (Extract the number) at i; 

我该怎么办呢?

下面的代码:

package creditcard; 
import java.io.FileWriter; 
import java.io.BufferedWriter; 
import java.io.IOException; 

public class Card { 

    //Declarations 
    private String cardNumber; 
    private boolean test = false; 
    private String cardType = "Unknown"; 

    public Card(){ 
     cardNumber = "0"; 
    }//end Default Constructor 

    public Card(String input){ 
     cardNumber = input; 
    }//end Constructor 

    // 
    public void typeMatcher(){ 
     if (cardNumber.startsWith("37")) 
      cardType = "American Express"; 
     if (cardNumber.startsWith("4")) 
      cardType = "Visa"; 
     if (cardNumber.startsWith("5")) 
      cardType = "Mastercard"; 
     if (cardNumber.startsWith("6")) 
      cardType = "Discover"; 
    }//end typeMatcher 

    // Returns true if card number is Valid. 
    public boolean isValid(String cardNumber){ 
     if (cardNumber.length() > 12 && cardNumber.length() < 17) 
      if((sumOfDoubleEvenPlace(cardNumber)+sumOfOddPlace(cardNumber))/10==0) 
       test = true; 
     return test; 
    }//end isValid 

    // Get result from Step 2. 
    public int sumOfDoubleEvenPlace(String cardNumber){ 
     int sum = 0; 
     int num = 0; 
     for (int i = cardNumber.length()-2; i>-1; i-=2){ 
      num = Integer.parseInt(cardNumber.substring(i,i+1)); 
      if (num<10) 
       sum+=(num*2); 
      else 
       sum+=getDigit(num); 
     }//end for 
     System.out.println(sum); 
     return sum; 
    }//end SumOfDoubleEvenPlace 

    // Return this number if it is a single digit 
    // Otherwise return the sum of the two digits. 
    public int getDigit (int num){ 
     int no1 = num/10; 
     int no2 = num%10; 
     return no1+no2; 
    }//end getDigit 

    // Returns sum of odd place digits in number. 
    public int sumOfOddPlace(String cardNumber){ 
     int sum = 0; 
     for (int i = cardNumber.length()-1; i>-1; i-=2) 
      sum += Integer.parseInt(cardNumber.substring(i,i)); 
     System.out.println(sum); 
     return sum; 
    }//end sumOfOddPlace 

    public void writeToFile(){ 
     try{ 
      FileWriter fw = new FileWriter("G:\\Output.txt",true); 
      BufferedWriter bw = new BufferedWriter(fw); 
      if (isValid(cardNumber)){ 
       bw.write(cardNumber+" is a valid "+cardType+" card."); 
       bw.newLine(); 
      }//end if 
      else{ 
       bw.write(cardNumber+" is an invalid "+cardType+" card."); 
       bw.newLine(); 
      }//end else 
      bw.close(); 
      System.out.println("Success"); 
     }//end try 

     catch(IOException ioe){ 
      ioe.printStackTrace(); 
     }//end catch 

    }//end outputToFile 

}//end Card 

目的是检查是否有信用卡号是有效的(学校项目)

回答

-1

有一个叫小法“的charAt()”那会做什么你要。

char c = someString.charAt(someString.length - 2); 

然后,您需要将字符转换为整数。

选择@Andrew White的答案,因为这使整数转换更容易。你可以用char来完成,但它有点琐碎(对我来说不好,因为我是C程序员)。

+2

我厌倦了在这里回答Java的问题。迂回混蛋的水平太高了。 – Pointy 2011-03-02 01:03:06

+0

阿门。有时候真让人恶心。 – EboMike 2011-03-02 01:05:03

+0

'0'的字符的数值为48 iirc。这可能是downvote的来源。 – 2013-06-03 20:18:50

2

只是substring/charAt要和解析它的数字(S)...

int d = Integer.parseInt(number.substring(start, start+1)) 
+0

这个解决方案不起作用,这是我一直在做的。 – 2011-03-02 00:54:57

+0

这是我的错误:线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“” – 2011-03-02 00:56:12

+0

@kid:呃,我以前用过这个,所以我知道它的工作原理;也许你可以告诉我们你不想要的是什么? – 2011-03-02 00:57:01

-1

如果你想在倒数第二个:

if (number.length() >= 2) { 
    int myNumber = number.charAt(number.length() - 2) - '0'; 
} 

或者您的循环:

for (int i = number.length()-2; i>-1; i-=2) 
    int x = number.charAt(i) - '0'; 
+0

OP表示DIGIT,因此,charAt比昂贵的整数解析操作性能高得多。显然,一旦我们处理了多个数字,使用适当的Integer方法将是更可取的。 – EboMike 2011-03-02 00:56:46

+0

问题是,在这种情况下,x是一个int,它不等于该点处的char,而是它等于unicode的值,我认为。孩子程序员是新手俚语。 – 2011-03-02 00:58:37

+0

这就是为什么有' - '0'。也许你应该在投票前先尝试代码? – EboMike 2011-03-02 00:59:40

0

只要这样做:

int x = number.charAt(i) - '0' 

Integer.parseInt在这里是矫枉过正的。在方法sumOfOddPlace

0

你的子代码有一个缺陷:

sum += Integer.parseInt(cardNumber.substring(i,i)); 

,应该是

sum += Integer.parseInt(cardNumber.substring(i,i+1)); 

这可能是你的格式异常的原因。