Java使用lastindexof从文件列表中提取日期

时间:2015-01-15 03:00:20

标签: java

我有一堆像这样命名对话的文件:

Call_Report_Jan_15_2015_0804AM.csv
Facility_Protection_Group_Report_Jan_15_2015_0800AM.csv
Node_Report_Jan_15_2015_0800AM.csv
Network_Element_Report_Jan_15_2015_0800AM.csv

从我注意到,我需要的日期总是在我之后。扩展名。我正在尝试使用lasindexof,但似乎无法弄明白

String fileDate = file.substring(0,file..lastIndexOf(".", 0));

即使我将0更改为-1,我仍然会收到错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1911)
at com.extract.populateConfigDate(extract.java:183)
at com.extract.connectFTPTellabs(extract.java:103)
at com.extract.<init>(extract.java:78)
at com.Main.main(Main.java:44)

任何人都知道是否可以使用正则表达式?

编辑:file = csv文件的名称

1 个答案:

答案 0 :(得分:1)

查看String#lastIndexOf(String, int)

的JavaDocs
  

返回指定子字符串最后一次出现的字符串中的索引,从指定的索引开始向后搜索。

这意味着该方法从位置0开始并尝试从那里向后移动

尝试使用file.substring(0, file.lastIndexOf("."))file.substring(0, file.lastIndexOf(".", file.length()))之类的内容

这将删除扩展名。接下来,您需要删除文件名以获取日期。

现在,您可以使用正则表达式,但要注意,我的正则表达式非常基本,但是,像... ...

String file = "Call_Report_Jan_15_2015_0804AM.csv";
Pattern p = Pattern.compile("[a-zA-Z]+_[0-9]+_[0-9]+_[0-9]+[a-zA-Z]+");
Matcher matcher = p.matcher(file);
if (matcher.find()) {
    int startIndex = matcher.start();
    int endIndex = matcher.end();
    String group = matcher.group();
    System.out.println(group);
}

输出

Jan_15_2015_0804AM