目前我正在使用这样的代码
while (fileName.endsWith(".csv")) {
fileName = fileName.substring(0, fileName.lastIndexOf(FILE_SUFFIX_CSV));
if (fileName.trim().isEmpty()) {
throw new IllegalArgumentException();
}
}
当用户用小写字母(.csv)指定扩展名时,上面的代码工作正常,但是windows接受区分大小写的扩展名,所以他可以给出类似.CsV,.CSV等的内容。我怎样才能修改上面的代码?
先谢谢
答案 0 :(得分:12)
为什么不把它变成小写?
while (fileName.toLowerCase().endsWith(".csv")) {
fileName = fileName.substring(0, fileName.toLowerCase().lastIndexOf(FILE_SUFFIX_CSV));
if (fileName.trim().isEmpty()) {
throw new IllegalArgumentException();
}
}
答案 1 :(得分:5)
深夜正则表达式解决方案:
Pattern pattern = Pattern.compile(".csv", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(fileName);
while (matcher.find()) {
fileName = fileName.substring(0, matcher.start());
if (fileName.trim().isEmpty()) {
throw new IllegalArgumentException();
}
}
Matcher
只会find()
一次。然后,它可以将start
位置报告给substring
原始文件名。
答案 2 :(得分:4)
你可以试试这种方式
int lastIndexOfDot=fileName.lastIndexOf("\\.");
String fileExtension=fileName.substring(lastIndexOfDot+1,fileName.length());
while(fileExtension.equalsIgnoreCase(".csv")){
}
或
while(fileName.toUpperCase().endsWith(".CSV"){}
答案 3 :(得分:4)
请转换为小写,然后进行比较。
while (fileName.toLowerCase().endsWith(".csv")) {
fileName = fileName.toLowerCase().substring(0, fileName.toLowerCase().lastIndexOf(FILE_SUFFIX_CSV));
if (fileName.toLowerCase().trim().isEmpty()) {
throw new IllegalArgumentException();
}
}
答案 4 :(得分:3)
您可以将两者都转换为大写。
所以改变这一行
fileName = fileName.substring(0, fileName.lastIndexOf(FILE_SUFFIX_CSV));
到
fileName = fileName.toUpperCase().substring(0, fileName.lastIndexOf(FILE_SUFFIX_CSV.toUpperCase()));
答案 5 :(得分:0)
使用此实用程序功能:
public static boolean endsWithIgnoreCase(String str, String suffix)
{
int suffixLength = suffix.length();
return str.regionMatches(true, str.length() - suffixLength, suffix, 0, suffixLength);
}
现在您可以这样做:
while (endsWithIgnoreCase(fileName, ".csv")) {
fileName = fileName.substring(0, fileName.toLowerCase().lastIndexOf(FILE_SUFFIX_CSV));
if (fileName.trim().isEmpty()) {
throw new IllegalArgumentException();
}
}