Java正则提取斜杠/反斜杠后的内容?正则新手求助
Java中使用String.split()提取文件名的正确方式
你之前用myStr.split("[^\\\\/]+$")得到的是前面的路径部分,因为这个正则匹配的是最后一段非斜杠(\或/)的内容,split会把这段内容从原字符串中移除,剩下的自然是前面的路径,而非你要的文件名。
要提取最后一段文件名,有两种简单可靠的方案:
方案1:按斜杠分割后取最后一个元素
直接用[\\\\/]作为分隔符(匹配\或/),分割后数组的最后一个元素就是目标文件名:
String myStr = "%abc%\\xyz\\test.exe"; String[] parts = myStr.split("[\\\\/]"); String fileName = parts[parts.length - 1]; // 结果为test.exe
- 对于
"test.exe"这种没有斜杠的字符串,split后数组只有一个元素,直接取parts[0]即可,parts.length - 1同样指向这个元素,无需额外判断。 - 这个方案逻辑直观,新手更容易理解和维护。
方案2:匹配并移除最后一个斜杠之前的所有内容
用正则.*[\\\\/]匹配从开头到最后一个斜杠的所有内容,split后剩下的部分就是文件名:
String myStr = "%abc%/xyz/test.exe"; String[] parts = myStr.split(".*[\\\\/]"); String fileName = parts.length > 1 ? parts[1] : parts[0];
- 当字符串包含斜杠时,split会把匹配到的路径部分移除,剩下的
parts[1]就是文件名; - 当没有斜杠时,正则无法匹配任何内容,split后数组只有原字符串,直接取
parts[0]即可。
测试所有场景
把两种方案放到测试代码里验证:
public class FileNameExtractor { public static void main(String[] args) { String[] testCases = { "%abc%\\xyz\\test.exe", "%abc%/xyz/test.exe", "test.exe" }; // 方案1测试 System.out.println("=== 方案1测试 ==="); for (String str : testCases) { String[] parts = str.split("[\\\\/]"); System.out.println(parts[parts.length - 1]); } // 方案2测试 System.out.println("\n=== 方案2测试 ==="); for (String str : testCases) { String[] parts = str.split(".*[\\\\/]"); String fileName = parts.length > 1 ? parts[1] : parts[0]; System.out.println(fileName); } } }
运行后两种方案都会输出三次test.exe,符合你的需求。
内容的提问来源于stack exchange,提问作者hal9000
相关产品推荐
相关产品推荐

