我正在使用以下代码
String sample = " : : ";
String[] splitTime = sample.split(":");
if ( splitTime[0].trim().equals("") ||
splitTime[0].trim().equals(null)) {
System.out.println("Inside Split 0");
splitTime[0] = "0";
} else if (splitTime[1].trim().equals("") ||
splitTime[1].trim().equals(null)) {
System.out.println("Inside Split 1");
splitTime[1] = "0";
}else if (splitTime[2].trim().equals("") ||
splitTime[2].trim().equals(null)) {
System.out.println("Inside Split2");
splitTime[2] = "0";
}
System.out.println("Value 1 :"+splitTime[0]);
System.out.println("Value 2 :"+splitTime[1]);
System.out.println("Value 3 :"+splitTime[2]);
输出:
内部分裂0
值1:0
价值2:
价值3:
我不知道为什么它不会进入第二和第三if-else声明。任何人都可以帮助我吗?
答案 0 :(得分:3)
因为如果第一个if语句为true,因此执行,那么其余的ifs不会被执行。如果要执行其他else-if语句,为什么不将它们重写为单独的if语句?
String sample = "::";
String[] splitTime = sample.split(":");
if ( splitTime[0].trim().equals("") ||
splitTime[0].trim().equals(null)) {
System.out.println("Inside Split 0");
splitTime[0] = "0";
}
if (splitTime[1].trim().equals("") ||
splitTime[1].trim().equals(null)) {
System.out.println("Inside Split 1");
splitTime[1] = "0";
}
if (splitTime[2].trim().equals("") ||
splitTime[2].trim().equals(null)) {
System.out.println("Inside Split2");
splitTime[2] = "0";
}
System.out.println("Value 1 :"+splitTime[0]);
System.out.println("Value 2 :"+splitTime[1]);
System.out.println("Value 3 :"+splitTime[2]);
答案 1 :(得分:2)
这是因为“else if
”。
如果你的代码有:
if (a) {
} else if (b) {
}
如果第一个分支是。
,则永远不会执行第二个分支相反,你需要:
if (a) {
}
if (b) {
}
使条件独立。
BTW,String.trim()
无法返回null
,并且您无法保证在String.split()
的输出中获得三个元素。可能更好的代码是:
String sample = " : : ";
String[] splitTime = sample.split(":");
for (int i = 0; i < splitTime.length; ++i) {
splitTime[i] = splitTime[i].trim();
if (splitTime[i].length() == 0) {
splitTime[i] = "0";
}
}
答案 2 :(得分:0)
这是由于If-Else子句的基本操作:
if(foo) {
// A
} else if(bar) {
// B
}
如果foo
为真,则A
将会执行,bar
将永远不会被测试。要获得所需的语义,请考虑将if块链接起来:
if(foo){
// A
}
if(bar) {
// B
}
答案 3 :(得分:0)
试
String sample = " 12 : 59 : 60 ";
// strip spaces and create up to 3 parts
String[] splitTime = sample.trim().split(" *: *", 3);
for (int i = 0; i < splitTime.length; i++)
System.out.println("Inside " + i + " '" + splitTime[i] + '\'');
打印
Inside 0 '12'
Inside 1 '59'
Inside 2 '60'
答案 4 :(得分:0)
在嵌套的if-if语句中,如果执行了一个语句,则不执行其他语句。在您的情况下,第一个if表达式始终为true,因此它会执行,因此其他两个永远不会执行。