我使用下面的代码获取一个数组,其中包含给定路径的所有子目录。
String[] subDirs = path.split(File.separator);
我需要这个数组来检查某些文件夹是否在这个路径中的正确位置。这看起来是一个很好的解决方案,直到findBugs抱怨File.separator被用作正则表达式。似乎将windows文件分隔符传递给一个从它构建正则表达式的函数是一个坏主意,因为反斜杠是一个转义字符。
我怎样才能不使用文件分隔符而以跨平台的方式分割路径呢?或者这样的代码可以吗?
String[] subDirs = path.split("/");
6条答案
按热度按时间ltqd579y1#
正在初始化模式字符串
当你需要将一个任意的
String
转换为正则表达式模式时,可以使用Pattern.quote
:来自API:
public static String quote(String s)
返回指定
String
的文本模式String
。此方法生成一个String
,可用于创建Pattern
,该Pattern
将与字符串s
匹配,就像字符串s
是文本模式一样。输入序列中的元字符或转义序列将没有特殊含义。s
-要进行文本化的字符串这意味着您可以执行以下操作:
正在初始化替换字符串
如果需要对任意替换
String
进行文本化,请使用Matcher.quoteReplacement
。来自API:
x1米11米1x
返回指定
String
的文本替换String
。此方法生成String
,它将用作Matcher
类的appendReplacement
方法中的文本替换s
。生成的String
将与被视为文本序列的s
中的字符序列匹配。斜线('\'
)和美元符号('$'
)将不被赋予特殊含义。s
-要进行文本化的字符串此引用的替换
String
在String.replaceFirst
和String.replaceAll
中也很有用:请注意,替换字符串中的反斜杠(
\
)和美元符号($
)可能会导致结果与将其视为文字替换字符串时的结果不同。如果需要,请使用Matcher.quoteReplacement
取消显示这些字符的特殊含义。示例
xam8gpfp2#
重复使用
path.getParentFile()
以获取路径的所有组件。不太好的办法是去
path.replaceAll("\\", "/").split("/")
。sc4hvdpw3#
创建一个空列表,并使用forEach迭代path元素,将每个元素插入列表中以供以后用途:
此外,如果需要特定的路径元素,请用途:
其中
<pathObject>
由对Paths.get()
的调用返回,如果需要在字符串中返回路径的多个部分,请用途:您可以使用以下公式获得路径元素的总数(用于
<intEnd>
):在Java Path和Paths文档页中还有其他有用的方法。
ui7jx7zq4#
java.nio.file.Path实现了
Iterable<Path>
,因此您可以执行以下操作:方法getNameCount和getName可以用于类似的目的。
x6h2sr285#
您可以使用Path界面:
bihw5rsg6#
怎么样