Jan*_*usz 17 java regex cross-platform file
我正在使用以下代码来获取包含给定路径中所有子目录的数组.
String[] subDirs = path.split(File.separator);
Run Code Online (Sandbox Code Playgroud)
我需要数组来检查某些文件夹是否在此路径中的正确位置.这看起来是一个很好的解决方案,直到findBugs抱怨File.separator被用作正则表达式.似乎将Windows文件分隔符传递给正在构建正则表达式的函数是一个坏主意,因为反斜杠是一个转义字符.
如何在不使用File.separator的情况下以跨平台方式拆分路径?或者这样的代码好吗?
String[] subDirs = path.split("/");
Run Code Online (Sandbox Code Playgroud)
pol*_*nts 38
每当您需要将任意字面值String用作正则表达式模式时,请使用Pattern.quote:
来自API:
public static String quote(String s)返回
String指定的文字模式String.此方法生成一个String可用于创建Pattern与字符串匹配的字符s,就好像它是文字模式一样.输入序列中的元字符或转义序列将没有特殊含义.参数:
s- 要文字化的字符串
返回:文字字符串替换
这意味着您可以执行以下操作:
String[] subDirs = path.split(Pattern.quote(File.separator));
Run Code Online (Sandbox Code Playgroud)
如果您需要对任意替换进行文字化String,请使用Matcher.quoteReplacement.
来自API:
public static String quoteReplacement(String s)返回
String指定的文字替换String.这种方法产生一个String,将工作作为文字置换s在appendReplacement所述的方法Matcher的类.该String产生了的字符序列将匹配s视为文字序列.斜杠('\')和美元符号('$')将没有特殊含义.参数:
s- 要文字化的字符串
返回:文字字符串替换
这引述更换String也是有用的String.replaceFirst和String.replaceAll:
请注意,替换字符串中的反斜杠(
\)和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同.使用Matcher.quoteReplacement抑制这些字符的特殊含义,如果需要的话.
System.out.println(
"O.M.G.".replaceAll(".", "!")
); // prints "!!!!!!"
System.out.println(
"O.M.G.".replaceAll(Pattern.quote("."), "!")
); // prints "O!M!G!"
System.out.println(
"Microsoft software".replaceAll("so", "$0")
); // prints "Microsoft software"
System.out.println(
"Microsoft software".replaceAll("so", Matcher.quoteReplacement("$0"))
); // prints "Micro$0ft $0ftware"
Run Code Online (Sandbox Code Playgroud)