代码分析失败:File.separator用于正则表达式

时间:2013-12-10 07:35:42

标签: java

我有一个代码分析工具,如果在下面的方法中标记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;
  }

4 个答案:

答案 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()

的Java文档
  

此字段初始化为包含值的第一个字符   系统属性file.separator。在UNIX系统上的值   这个字段是'/';在Microsoft Windows系统上,它是'\'

它清楚地表明,对于Windows \,您将被视为\\,您可以在正则表达式中使用它,因为它不会被视为特殊字符。

答案 3 :(得分:0)

我也遇到了同样的问题,但我终于使用了“\\”。我不知道如果Unix上的代码该怎么做。