java 代码分析失败:文件.用于正则表达式的分隔符

ctzwtxfj  于 2023-01-15  发布在  Java
关注(0)|答案(4)|浏览(141)

我有一个代码分析工具,如果标记文件。分隔符在下面的方法,并提出它作为一个关键问题。我不明白如何实现建议的修复,任何想法?

正确性-正则表达式使用的文件.分隔符

这里的代码在需要正则表达式的地方使用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;
  }
ztmd8pv5

ztmd8pv51#

解释是相当清楚的,但详细的问题如下:
当你的代码在windows上运行时File.separator\,所以

i.split(File.separator);

读取

i.split("\\");

split()接受正则表达式作为参数,但\不是正则表达式(注意,java中的String文字"\\"会导致只有'\'的单字符String),因为backsla sh是转义字符,所以您的代码将导致运行时错误。

cygmwpex

cygmwpex2#

根据文件,一切都在控制之中。
在UNIX系统上,此字段的值为“/”;在Microsoft Windows系统上,它是“\”。
如果你把'\'放在一个模式中,它会被当作一个反斜杠,正如你所期望的。

yptwkmov

yptwkmov3#

File.separatorChar()的Java文档
此字段初始化为包含系统属性file. separator的值的第一个字符。在UNIX系统上,此字段的值为“/”;在Microsoft Windows系统上为“\”
它清楚地表明,对于windows,\将被视为\\,您可以在正则表达式中使用它,因为它不会被视为特殊字符。

afdcj2ne

afdcj2ne4#

最后我使用了“\\“,但如果代码是在Unix上,我不知道该怎么做。

相关问题