2011-03-02 165 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)); 

這可能是你的格式異常的原因。