2017-03-22 2 views
0

스위치 케이스 문을 사용하여 루프에서 문자열을 전달할 때 다음 오류가 표시됩니다.스위치 케이스에서 이스케이프 문자 오류

1 x  X 00 
1 
java.lang.RuntimeException: INVALID VALUE 
    at test.main(test.java:28) 

디버깅하는 동안 이스케이프 문자가있는 문자열의 "x"뒤에 예외가 발생하는 것으로 파악됩니다. 왜 이런 일이 일어나고 있는지 혼란 스럽습니다. 이스케이프 문자를 무시해서는 안되며 s.charAt (i)가 다음 문자로 넘어 가야합니까?

public class test{ 

    public static void main(String [] args){ 

    String s = "1 x \tX 00"; 

    System.out.println(s); 

    for(int i = 0; i<s.length(); i++){ 
     switch(s.charAt(i)){ 

     case '0': 
      System.out.println("0"); 
      break; 
     case '1': 
      System.out.println("1"); 
      break; 
     case 'X': 
      System.out.println("X"); 
      break; 
     case 'x': 
      System.out.println("X"); 
      break; 

     default: throw new RuntimeException("INVALID VALUE"); 
     } 
    } 
    } 
} 

답변

0

문제는 이스케이프 문자가 아닙니다. for 루프는 문자열 s의 모든 문자 위로 실행됩니다. 여기에는 공백과 탭이 포함됩니다.

문자열을 실행할 경우 첫 번째 문자 인 s.charAt(0)'1'이됩니다. 이것은 switch 문의 경우 중 하나입니다. 그러나 문자열의 다음 문자 인 s.charAt(1)은 단순히 공백으로 ' '입니다. switch 문에 공백이 있으면 아무 것도 없으므로 기본 case로 이동하여 거기에서 정의한 예외를 throw합니다.

아마도 C에서 어쩌면 scanf("%c", &var) 문자열을 통해 반복을 혼란스럽게 보입니까?

for 루프가 실제로 문자열 s의 모든 문자로 실행되므로 공백이 무시되지 않습니다. 공백이 수동으로 무시하도록 사례를 수동으로 만들어야합니다. 예 :

case ' ': 
case '\t': 
case '\n': 
case '\r': 
    break; 
+0

감사합니다. – Saujan21

관련 문제