保存整数字符串

时间:2014-08-04 12:32:06

标签: java string integer save isbn

我正在处理与 ISBN书籍代码相关的问题。我需要制作程序,以便输入所需的10位数代码的9位数字。 第10个是'?' 。程序需要输出适当的数字。我开始将输入字符串拆分为两个子字符串,无论在哪里?'被检测到。

我的问题是如何从输入字符串中获取每个整数(因此我可以多次使用与某些数字相关的整数来获得最终答案)

例如:输入字符串是:' 01234?6789 '

如何从此字符串中提取所有数字,以便可以对这些数字执行所有数学运算

2 个答案:

答案 0 :(得分:0)

这样的事情对你有帮助吗?

private static int getCharAsInt(int x, String number) {
        if ((int) number.charAt(x) - 48 > 9){
            //do something if the char is "?"
            //maybe return -1 to know its not a number you can use
            return -1;
        }
        else //return the char as an int
            return (int) number.charAt(x) - 48;
    }

此方法将返回char"数字"的String位置x为int,并在找到-1时返回"?"。当你找到"?"时,并不是说你可以做任何你喜欢的事。

无论如何,当你这样称呼它时:

String string = "01234?6789";
for(int i = 0; i < string.length(); i++)
    System.out.print(getCharAsInt(i, string) + " ");

输出将是:

0 1 2 3 4 -1 6 7 8 9

当然,该方法会返回int,因此您可以调用它并执行您想要获得最终答案的任何操作。

希望这有帮助

答案 1 :(得分:0)

这包含一些您应该学习的语句序列。见评论。

// checks whether the ten digits in the int[] make up a valid ISBN-10
private boolean isValid( int[] digits ){
    int sum = 0;
    for( int i = 0; i < digits.length; i++ ){
        sum += (10 - i)*digits[i];
    }
    return sum % 11 == 0;
}

// Expect a string with 9 or 19 digits and at most one '?'
public String examine( String isbn ){
    if( isbn.length() != 10 )
        throw new IllegalArgumentException( "string length " + isbn.length() );
    if( ! isbn.matches( "\\d*\\??\\d*" ) )
        throw new IllegalArgumentException( "string contains invalid characters" );
    // Now we have 9 or 10 digits and at most one question mark.
    // Convert char values to int values by subtracting the integer value of '0'
    int qmPos = -1;
    int[] digit = new int[10];
    for( int iDig = 0;  iDig < isbn.length(); iDig++ ){
        char c = isbn.charAt(iDig);
        if( c == '?' ){
             qmPos = iDig;
             digit[iDig] = 0;
        } else {
            digit[iDig] = c - (int)'0';
        }
    }
    // If qmPos is still -1, there's no '?'
    if( qmPos == -1 ){
        // Is it a valid ISBN-10?
        if( isValid( digit ) ){
            return Arrays.toString( digit );
        } else {
             throw new IllegalArgumentException( "not a valid ISBN" );
        }
    }

    // Which digit can replace '?'?
    for( int probe = 0; probe <= 9; probe++ ){
        digit[qmPos] = probe;
        if( isValid( digit ) ){
            // found it - return the completed ISBN-10
            return Arrays.toString( digit );
        }
    }
    // Failure
    throw new IllegalArgumentException( "no digit completes an ISBN" );
}