2016-10-05 5 views
-1

아래 코드를 사용하여 문자열이 순차적 정수로 구성되는지 여부를 확인하려고합니다. 그러나, 그것을 실행할 때 NumberFormatException이 throw됩니다.substring()을 사용할 때 NumberFormatException

나는 이것이 substring()에 대한 색인 값으로 변수 i를 사용하여 발생한다고 판단했습니다.

다른 방법을 찾을 수 없어서 정말 좌절했습니다. 누구든지 substring()이 변수를 인덱스 값으로 사용할 수없는 이유를 알고 있으며이 문제를 수정/우회 할 수있는 방법은 무엇입니까? (거대한 if 문을 사용하는 것 외에는) 어떤 도움이라도 정말 감사 할 것입니다! 감사!

public static void main(String[] args) { 

    String x = "12345"; 
    int counter = 0; 

    for (int i = 0; i < 5; i++) { 
     if (Integer.parseInt(x.substring(0, 1)) == (Integer.parseInt(x.substring(i, i++))) - i) { 
      counter++; 
     } 
    } 

    if (counter == 5) { 
     System.out.println("String is sequential"); 
    } 
} 
+2

외에 다른 어떤에서 나는, 당신은 아마 내가 * 내 * 루프'++ '증가하지 않아야합니다. 'x.substring (i, i + 1)'을 의미합니까? –

+0

'x.substring'에'i ++'를 사용하지 않으면, 이후에 루프를 증가시켜야합니다. 그냥'i + 1'을하고'x.length -1'까지 반복하십시오. – SomeJavaGuy

+0

하지만'Character.getNumericValue (x.charAt (i))'를 사용할 수 있습니다. –

답변

3

x.substring(i, i++) 빈 문자열을 제공하는 (substring로 전달 된 값 우려 아득히) x.substring(i, i) 동일하다. 빈 문자열에 Integer.parseInt을 호출하면 NumberFormatException이됩니다. 당신은 모든 substring을 사용하지 않도록 할 수

for (int i = 1; i < x.length(); i++) { // note the range change 
    // using (i,i+1) instead of gives you a single character 
    if (Integer.parseInt(x.substring(0, 1)) == (Integer.parseInt(x.substring(i, i+1)))-i) { 
     counter++; 
    } 
} 

을 또는 :

현재 루프를 해결하려면.

for (int i = 1; i < x.length(); i++) { 
    if (x.charAt(0) == x.charAt(i) - i) { 
     counter++; 
    } 
} 
0
은 다음과 같이 코드를 변경

:

if (Integer.parseInt(x.substring(0, 1)) == (Integer.parseInt(x.substring(i, i+1))) - i) { 

을 그리고 그것은 작동합니다 단순히 String의 문자 반복.

0

하위 문자열을 추출한 다음 다시 정수로 구문 분석 할 필요가 없습니다.

Character.getNumericValue(x.charAt(0)) == Character.getNumericValue(x.charAt(i)) 

은 모든 문자가 자릿수 인 경우 동일하게 적용됩니다. 문자가 숫자가 아닌 경우 NumberFormatException을 던지지 않습니다.

0
 (Integer.parseInt(x.substring(i, i++))) 

이 빈 문자열을 반환합니다, 당신이 그것을 만들 필요 ++

관련 문제