Java 如何从一串数字中提取单个数字?

Java 如何从一串数字中提取单个数字?,java,string,Java,String,例如: 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; i

例如:

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

我们的目标是检查信用卡号码是否有效。学校项目有一种叫做charAt的小方法,可以满足你的需要

 char c = someString.charAt(someString.length - 2);
然后需要将字符转换为整数

选择@Andrew White的答案,因为这使整数转换更容易。你可以从一个字符开始,但这对我来说有点讨厌,因为我本质上是一个C程序员。

只需要/你想要的数字并解析它

int d = Integer.parseInt(number.substring(start, start+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';
只要这样做:

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

Integer.parseInt在这里是多余的。

方法sumOfOddPlace中的子字符串代码有一个缺陷:

  sum += Integer.parseInt(cardNumber.substring(i,i));
那应该是

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

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

这是我的错误:线程主java.lang.NumberFormatException中的异常:对于输入字符串:@kid:eh,我以前使用过它,所以我知道它可以工作;也许你可以告诉我们你不希望它做什么?但它不是空的。我有打印语句显示y字符串不是,用于双重检查。投票否决你不喜欢的答案不是有点刻薄吗?@Kid:请将输出添加到你的问题中。OP表示数字,因此,charAt比昂贵的整数解析操作性能好得多。显然,一旦我们处理的是一个以上的数字,使用适当的整数方法就更好了。问题是,在这个场景中,x是一个int,它在那个点上不等于char,而是等于unicode的值,我认为。Kid Programmer是新兵的俚语。这就是为什么会出现-'0'。也许你应该在否决之前先尝试一下代码?@EboMike:这只是一个偏好,但我避免使用-0,除非这是非常关键的代码,因为它更难阅读。但我并没有否决全世界的投票来表达这一点:@安德鲁:我知道:这就像一个神奇的仙女,把投票的灰尘撒在我们所有人身上!我仍然认为在否决投票时应该有强制性的评论,但这一点已经讨论到了极点。我厌倦了在这里回答Java问题。学究式的冲动水平太高了。阿门。有时很恶心。字符“0”的数值为48 iirc。这可能就是否决票的来源。