Java使用正则表达式来提取文件名

Mag*_*gie 0 java regex

我需要从文件的绝对路径获取文件名(我知道该file.getName()方法,但我不能在这里使用它). 编辑:我不能使用file.getName()因为我不需要文件名; 我也需要文件路径的一部分(但同样,不是整个absoulte路径).在提供某个路径之后,我需要文件路径的一部分.

假设该文件位于文件夹中:

C:\Users\someUser
Run Code Online (Sandbox Code Playgroud)

在Windows机器上,如果我创建一个模式字符串如下:

String patternStr = "C:\\Users\\someUser\\(.*+)";
Run Code Online (Sandbox Code Playgroud)

我得到一个例外: java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence反斜杠.

如果我使用Pattern.quote(File.pathSeparator):

String patternStr = "C:" + Pattern.quote(File.separator) + "Users" + Pattern.quote(File.separator) + "someUser" + Pattern.quote(File.separator) + "(.*+)";
Run Code Online (Sandbox Code Playgroud)

生成的模式字符串是:C:\Q;\EUsers\Q;\EsomeUser\Q;\E(.*+)当然与实际fileName"C:\ Users\someUser\myFile.txt"不匹配.

我在这里错过了什么?解析文件名的正确方法是什么?

Ste*_*n C 7

解析文件名的正确方法是什么?

解析文件名的正确方法是使用File(String).使用正则表达式可以将平台依赖项硬连接到代码中.这是个坏主意.

我知道你说你不能使用File.getName()......但这是正确的解决方案.如果你愿意说为什么你不能使用File.getName()或许我可以建议一个替代解决方案.

  • 例如,不难想象一个带有像filterFiles(String regexp)`这样的方法的API.如果他说*"我不能使用`File.getName`"*,那么我认为我们应该假设情况确实如此. (2认同)