2011-03-02 8 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의 대답을 선택하십시오. 당신은 숯에서 그것을 할 수 있지만, 조금 냉담합니다. (왜냐하면 저는 마음에 C 프로그래머이기 때문에). 당신이 원하는 그것을 구문 분석

+2

여기 자바 질문에 답하는 것이 힘듭니다. 저학년 저크 레벨이 너무 높습니다. – Pointy

+0

아멘. 때로는 아프다. – EboMike

+0

'0'문자의 숫자 값은 48 iirc입니다. 그것은 아마도 downvote가 어디에서 왔는지입니다. –

2

그냥 substring/charAt 숫자 (들) ...

int d = Integer.parseInt(number.substring(start, start+1)) 
+0

이 솔루션은 효과가 없습니다. 내가 해왔 던 것입니다. –

+0

이것은 내 오류입니다 : "main"스레드의 예외 java.lang.NumberFormatException : 입력 문자열의 경우 : " –

+0

@kid : 어, 전에 사용했기 때문에 * 작동합니다. 어쩌면 당신은 당신이 원하지 않는 일을 우리에게 말할 수 있습니까? –

-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

+0

이 시나리오의 x는 그 시점에서 char과 같지 않은 int이며, 대신 unicode의 값과 같습니다. Kid Programmer는 초보자를위한 속어입니다. –

+0

그래서 '-'0 '이 있습니다. 투표를하기 전에 먼저 코드를 시도해야할까요? – EboMike

0

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

Integer.parseInt은 과장입니다.

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

이것은 아마 당신의 형식 예외의 원인

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

해야한다 : 방법 sumOfOddPlace에서

0

귀하의 문자열 코드는 결함이있다.

관련 문제