我正在解析一个文本文件,其中每行的第一个符号表示不同的东西。
现在我正在做这样的事情:
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;
}
答案 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":...
...
}
}
这将分开你的两个