我想得到子字符串

时间:2014-09-25 05:52:11

标签: java string rcp

目前我正在使用这样的代码

    while (fileName.endsWith(".csv")) {
        fileName = fileName.substring(0, fileName.lastIndexOf(FILE_SUFFIX_CSV));
        if (fileName.trim().isEmpty()) {
            throw new IllegalArgumentException();
        }
    }

当用户用小写字母(.csv)指定扩展名时,上面的代码工作正常,但是windows接受区分大小写的扩展名,所以他可以给出类似.CsV,.CSV等的内容。我怎样才能修改上面的代码?

先谢谢

6 个答案:

答案 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();
    }
}