如何从一串数字中提取单个数字?
问题描述:
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
目的是检查是否有信用卡号是有效的(学校项目)
答
有一个叫小法“的charAt()”那会做什么你要。
char c = someString.charAt(someString.length - 2);
然后,您需要将字符转换为整数。
选择@Andrew White的答案,因为这使整数转换更容易。你可以用char来完成,但它有点琐碎(对我来说不好,因为我是C程序员)。
答
如果你想在倒数第二个:
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的问题。迂回混蛋的水平太高了。 – Pointy 2011-03-02 01:03:06
阿门。有时候真让人恶心。 – EboMike 2011-03-02 01:05:03
'0'的字符的数值为48 iirc。这可能是downvote的来源。 – 2013-06-03 20:18:50