我正在解析一个可能有日期的文件.如果日期存在,则将其格式化为两位数或四位数年份,但始终使用斜杠(例如,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)
经过一段时间的努力,我意识到我以前从未嵌套过这样的语句,而且我在解密错误方面遇到了麻烦.第else
9行(第一行)else without if
在编译期间给出了一个错误.我怀疑我在某个地方有一个错位的大卷曲,虽然根据我引用的示例代码和教程似乎没问题.我无法发现问题,而且我的"试试看看会发生什么"的实验都没有成功.有人能指出我没看到的东西吗?
这不会编译开始:
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)
注意你得到的额外的分号和不好的支撑.重点是指定:
{ }
除非是单个语句,否则每个块都必须在其中.
虽然在某些情况下你可以在没有牙套的情况下离开,但通常最好总是使用它们.当您将单个语句主体更改为多语句主体时,错误的空间就更小了.