当我使用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");
}
}
}
}
答案 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;