我有一堆像这样命名对话的文件:
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文件的名称
答案 0 :(得分:1)
查看String#lastIndexOf(String, int)
返回指定子字符串最后一次出现的字符串中的索引,从指定的索引开始向后搜索。
这意味着该方法从位置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