2016-08-16 5 views
0

저는 JAVA를 배우고 있으며 최근에는 몇 가지 교육 과제에서 동일한 문제가있었습니다.8 진수를 십진수로 처리하십시오.

일부 숫자가 있는데 그 중 일부는 0부터 시작합니다.이 숫자는 8 진수이므로 원하는 숫자가 아니거나 "8"숫자로 인해 오류가 발생합니다. 또는 "9"는 8 진수가 아니기 때문에).

지금까지 14 또는 05와 같은 두 자리 숫자로 작업해야했습니다. 문자열로 처리했습니다. 및 문자열 번호를 모두 확인하고 지금은 알 수없는 리터가이

String numStr = "02"; 

if(numStr.startsWith("0")) { 
    int num = getNumericValue(numStr.charAt(1)); 
} else { 
    int num = Integer.parseInt(numStr); 
} 

같은 숫자로 변환하는 기능을 숫자로 변환 알 수없는 자릿수 (아마도 2를 넘는 숫자)의 번호입니다. 내가 원한다면 루프와 .substring()을 사용할 수 있지만 더 쉬운 방법이 있어야한다는 것을 안다.

어떻게 든 0을 무시하는 방법이 있습니까?

편집 : 지금까지 난 항상 내가 문제를 해결하는 쉬운 방법을 찾을 수 있기 때문에 될 문자열을 사용한 작업했던 번호를 편집

. 내가 0010 27 09했다 때 나는 같이 선언했다 :
String[] numbers = {"0010", "27", "09"};
I는 다음과 같이 선언하는 경우 때문에 :
int[] numbers = {0010, 27, 09};
번호 [0] 8 대신 10되며 숫자는 [2] 나에게 오류를 줄 것이다

사실 나는 Strings로 작업하고 싶지 않습니다. 내가 실제로 원하는 것은 0으로 시작하는 숫자를 숫자 (예 : int 또는 long)로 읽는 것입니다.하지만 소수로 나타내기를 원합니다. 문제는 내가 소스에서 많은 번호를 가졌다는 것입니다. 그것들을 코드에 복사하고 그것을 배열의 선언으로 편집했습니다. 하지만 나는 문자열을 0으로 지우고 다시 숫자로 만들려는 문자열을 편집하고 싶지 않습니다.

+2

''numStr '.charAt (1)'은''u' '입니다. 그리고''numStr "'이 숫자가 아니기 때문에'Integer.parseInt ("numStr ")'는'NumberFormatException'으로 실패합니다. –

+0

예상/예제 입력 및 출력을 게시 할 수 있습니까? –

+0

주제가 아닐 수도 있지만 문자열 변수를 큰 따옴표로 묶어 사용했습니다. 그냥 numStr이어야하고 "numStr"이 아니어야합니다.구문 분석 및 캐릭터 획득 중. – iMan

답변

1

나는 당신이 달성하고 싶은 것이 확실하지 않습니다. 8-based 형식 (사례 1)의 String으로 표시된 Integer을 읽을 수 있습니까? 또는 String을 읽고 8-based (사례 2)이더라도 10-based으로 해석 하시겠습니까? 또는 Integer을 수동으로 변환하지 않고 만드는 방법을 알고 싶습니까? (사례 3)?

사례 1 :

String input = "0235"; 
// Cut the indicator 0 
input = input.substring(1); 

// Interpret the string as 8-based integer. 
Integer number = Integer.parseInt(input, 8); 

케이스 2 :

String input = "0235"; 
// Cut the indicator 0 
input = input.substring(1); 

// Interpret the string as 10-based integer (default). 
Integer number = Integer.parseInt(input); 

사례 3 :

// Java interprets this as octal number 
int octal = 0235; 
// Java interprets this as hexadecimal number 
int hexa = 0x235 
// Java interprets this as decimal number 
int decimal = 235 

참고 지표에 반응하여 지능형 방법 Case 1를 확장 할 수

public Integer convert(final String input) { 
    String hexaIndicator = input.substring(0, 2); 

    if (hexaIndicator.equals("0x")) { 
     return Integer.parseInt(input.substring(2), 16); 
    } else { 
     String octaIndicator = input.substring(0, 1); 

     if (octaIndicator.equals("0")) { 
      return Integer.parseInt(input.substring(1), 8); 
     } else { 
      return Integer.parseInt(input); 
     } 
    } 
} 
+0

질문의 가난하고 나쁜 표현에 대해 유감스럽게 생각하고 그것을 지정하려고했는데 지금은 괜찮 으면 좋겠다. 이것은 내가 알고 싶었던 것이 아니지만, 내가 모르는 것들을 담고있다. –

+0

아, 입력 (문자열)은 모두 10 진수로 처리해야하지만 임의의 많은 ** leading ** zeroes를 가질 수 있습니다. 왜냐하면'Integer.parseInt (input)'이 실패하기 때문에 무시해야합니다. 주어진'String'의 선행 제로를 모두 제거하고 싶습니까? 이온,'Regex'. 'String'의'replaceAll' 메소드는 그러한'Regex'를 받아들입니다. 다음을 시도해보십시오 :'input = input.replaceAll ("^ 0 *", "");'앞의 0을 모두 빈 문자열로 바꿉니다. 여기에서 시험해 볼 수 있습니다 : [https://regex101.com/r/oW4oM6/1](https://regex101.com/r/oW4oM6/1) – Zabuza

관련 문제