切换案例中的转义字符错误

时间:2017-03-22 16:11:27

标签: switch-statement

当我使用switch case语句在循环中传递一个字符串时,它提供了以下错误。

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");
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

问题不在于逃避角色。你的for循环遍历字符串s中的每个字符。所以这包括空格和标签。

如果您浏览字符串,则第一个字符s.charAt(0)将为'1'。这是switch语句的一种情况。但是,字符串中的下一个字符s.charAt(1)只是一个空格' '。 switch语句中没有空格,因此它转到默认情况并抛出您在那里定义的异常。

你似乎混淆了字符串中的循环与来自C的scanf("%c", &var)

在任何情况下,不会忽略空格,因为你的for循环实际上遍历字符串s中的每个字符。您将手动为白色空格设置案例以忽略它们。例如:

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