我有一个代码分析工具,如果标记文件。分隔符在下面的方法,并提出它作为一个关键问题。我不明白如何实现建议的修复,任何想法?
正确性-正则表达式使用的文件.分隔符
这里的代码在需要正则表达式的地方使用File.separator。这在Windows平台上会失败,因为File.separator是一个反斜杠,在正则表达式中被解释为转义符。除了其他选项,您还可以使用File.separatorChar=='' &“\”:文件.separator代替文件.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;
}
4条答案
按热度按时间ztmd8pv51#
解释是相当清楚的,但详细的问题如下:
当你的代码在windows上运行时
File.separator
是\
,所以读取
split()
接受正则表达式作为参数,但\
不是正则表达式(注意,java中的String文字"\\"
会导致只有'\'
的单字符String),因为backsla sh是转义字符,所以您的代码将导致运行时错误。cygmwpex2#
根据文件,一切都在控制之中。
在UNIX系统上,此字段的值为“/”;在Microsoft Windows系统上,它是“\”。
如果你把'\'放在一个模式中,它会被当作一个反斜杠,正如你所期望的。
yptwkmov3#
File.separatorChar()
的Java文档此字段初始化为包含系统属性file. separator的值的第一个字符。在UNIX系统上,此字段的值为“/”;在Microsoft Windows系统上为“\”
它清楚地表明,对于windows,
\
将被视为\\
,您可以在正则表达式中使用它,因为它不会被视为特殊字符。afdcj2ne4#
最后我使用了“
\\
“,但如果代码是在Unix上,我不知道该怎么做。