我有一个代码分析工具,如果在下面的方法中标记File.separator并将其作为一个关键问题提出。我不明白如何实施建议的修复,任何想法?
正确性 - 用于正则表达式的File.separator
这里的代码使用File.separator,其中需要正则表达式。这将在Windows平台上失败,其中File.separator是反斜杠,在正则表达式中将其解释为转义字符。在其他选项中,你可以使用File.separatorChar =='\'& “\\”:File.separator而不是File.separator
private LinkedHashSet<String> process(Set<String> directoryList) {
LinkedHashSet<String> fullSet = new LinkedHashSet<String>();
for (String i : directoryList) {
String[] str = i.split(File.separator);
StringBuilder sb = new StringBuilder();
for (String s : str) {
sb.append(s);
fullSet.add(sb.toString());
sb.append(File.separator);
}
}
return fullSet;
}
答案 0 :(得分:2)
解释非常清楚,但具体问题如下:
当您的代码在Windows File.separator
上运行时,\
为<{1}},所以
i.split(File.separator);
读取
i.split("\\");
split()
将正则表达式作为参数,但\
不是正则表达式(请注意,java中的字符串文字"\\"
只产生一个字符的字符串'\'
),因为backsla sh是转义字符,因此您的代码将导致运行时错误。
答案 1 :(得分:1)
根据documentation,一切都在掌控之中。
在UNIX系统上,此字段的值为“/”;在Microsoft Windows系统上,它是'\\'。
如果将'\\'放在pattern中,它将被视为反斜杠,就像您预期的那样。
答案 2 :(得分:1)
File.separatorChar()
此字段初始化为包含值的第一个字符 系统属性file.separator。在UNIX系统上的值 这个字段是'/';在Microsoft Windows系统上,它是'\'
它清楚地表明,对于Windows \
,您将被视为\\
,您可以在正则表达式中使用它,因为它不会被视为特殊字符。
答案 3 :(得分:0)
我也遇到了同样的问题,但我终于使用了“\\
”。我不知道如果Unix上的代码该怎么做。