我想得到子字符串

Gan*_*esh 3 java string rcp

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

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

当用户用小写字母(.csv)指定扩展名时,上面的代码工作正常,但是windows接受区分大小写的扩展名,所以他可以提供类似.CsV,.CSV等.如何修改上面的代码?

提前致谢

Mad*_*tha 13

你为什么不把它变成小写?

while (fileName.toLowerCase().endsWith(".csv")) {
    fileName = fileName.substring(0, fileName.toLowerCase().lastIndexOf(FILE_SUFFIX_CSV));
    if (fileName.trim().isEmpty()) {
        throw new IllegalArgumentException();
    }
}
Run Code Online (Sandbox Code Playgroud)


Sot*_*lis 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Matcherfind()一次.然后,它可以报告start您可以使用的位置到substring原始文件名.