Как извлечь одну цифру из строки цифр? - PullRequest
1 голос
/ 02 марта 2011

Пример:

String number = "1234567890123456";

Как мне сохранить вторую-последнюю цифру в переменной типа 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

Цель состоит в том, чтобы проверить, действителен ли номер кредитной карты (школьный проект)

Ответы [ 5 ]

2 голосов
/ 02 марта 2011

Просто подстрока / charAt требуемая цифра (ы) и ее анализ ...

int d = Integer.parseInt(number.substring(start, start+1))
0 голосов
/ 03 июня 2013

Ваш код подстроки в методе sumOfOddPlace имеет недостаток:

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

, который должен быть

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

Возможно, это причина вашего исключения формата.

0 голосов
/ 03 июня 2013

Просто сделайте это:

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

Integer.parseInt здесь излишне.

0 голосов
/ 02 марта 2011

Если вы хотите, чтобы секунда длилась:

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 голосов
/ 02 марта 2011

Есть небольшой метод charAt (), который будет делать то, что вы хотите.

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

Затем вам нужно преобразовать символ в целое число.

Выберите ответ @Andrew White, потому что это упрощает целочисленное преобразование. Вы можете сделать это с помощью символа, но это немного неприлично (ну, не для меня, потому что я в душе программист на Си).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...