使用switch-statement检查更改变量

时间:2018-04-29 20:15:39

标签: java

我正在解析一个文本文件,其中每行的第一个符号表示不同的东西。

现在我正在做这样的事情:

while((line         = inputStream.readLine()) != null) {

    if(line.startsWith("O")) { .... }
    else if(line.startsWith("B")) { .... }
    else if(line.startsWith("30")) { .... }
    else if(line.startsWith("99")) { .... }
    else if(line.startsWith("00")) { .... }

我宁愿用switch语句来完成这个,但是我不知道我会怎样做,因为我只能检查B是一个字符长,30是两个,否则我可以做line.subString(0,1)。

我心中有这样的东西,但是这显然不起作用。

switch(line.startsWith(X)){
    case "B": //where B is replacing X
         break;
}

2 个答案:

答案 0 :(得分:2)

实际上,正如您所注意到的,您的逻辑更适合使用一系列条件语句(if)而不是switch语句。
使用switch语句可以使其工作,但它只会使逻辑更复杂,因为您必须首先使用line.subString(0,1)line.subString(0,2)根据内容提取实际字符串。线的开头。
此外,在代码质量方面,这两种方法足够接近 所以只要保持你的实际逻辑。

答案 1 :(得分:1)

你可以这样做。使用正则表达式分隔以字母或两个数字开头的行。然后使用子字符串或该行的第一个字符来区分它们。

if (line.matches("^[OB].*")) {
    switch(line.charAt(0)) {
        case 'O' :...
        case 'B' :...
        ...
    }
} else if (line.matches("^[0-9]{2}.*") {
    switch(line.substring(0,2)) {
        case "00":...
        case "30":...
        case "99":...
        ...
    }
}

这将分开你的两个