我在使用嵌套的`if`语句时遇到了麻烦

dww*_*n66 0 java if-statement

我正在解析一个可能有日期的文件.如果日期存在,则将其格式化为两位数或四位数年份,但始终使用斜杠(例如,MM/DD/YY或MM/DD/YYYY).

public class T2 {
    public static void main(String args[]) {
        inputLine = "foo foo foo foo foo 10/26/2013 bar bar bar bar bar";

        if(inputLine.indexOf("/")>0) {                       // if date exists
            taskDateSOF = (inputLine.indexOf("/")-2);        // then start of field is first instance of / minus two
            if (inputLine.lastIndexOf.isNumeric("/")+3); {         //    and if there's a number in the third position after the last /
                taskDateEOF = (inputLine.lastIndexOf("/") + 4);     //    the the end of date field is last instance of / +4
            else                                                  // <<< this "else" give an "else without if compiler error 
                taskDateEOF = (inputLine.lastIndexOf(("/" + 2)));      // else it's the last instance of / +2
                taskDate = inputLine.trim().substring(taskDateSOF,taskDateEOF).trim(); }  //
            }
        else                                            
             taskDate = "00/00/0000";
        }
            System.out.println(taskDate+" "+inputLine);
    }
}
Run Code Online (Sandbox Code Playgroud)

经过一段时间的努力,我意识到我以前从未嵌套过这样的语句,而且我在解密错误方面遇到了麻烦.第else9行(第一行)else without if在编译期间给出了一个错误.我怀疑我在某个地方有一个错位的大卷曲,虽然根据我引用的示例代码和教程似乎没问题.我无法发现问题,而且我的"试试看看会发生什么"的实验都没有成功.有人能指出我没看到的东西吗?

Jon*_*eet 7

这不会编译开始:

if (inputLine.lastIndexOf.isNumeric("/")+3);
Run Code Online (Sandbox Code Playgroud)

这在各种方面都是错误的 - 甚至不清楚你的意思.lastIndexOf是一个方法调用 - 为什么你像字段一样使用它?你想把3加到什么?您希望何时将条件评估为真?

然后你的if/else语法错了.你通常应该使用:

if (condition) {
    // Code
} else {
    // Code
}
Run Code Online (Sandbox Code Playgroud)

相反,你有:

if (condition); {
   // Code
else
   // Code
}
Run Code Online (Sandbox Code Playgroud)

注意你得到的额外的分号不好的支撑.重点是指定:

  • 一个条件
  • 如果条件为真,则执行的代码块
  • 否则执行的代码块

{ }除非是单个语句,否则每个块都必须在其中.

虽然在某些情况下你可以在没有牙套的情况下离开,但通常最好总是使用它们.当您将单个语句主体更改为多语句主体时,错误的空间就更小了.