Java - 用于拆分目录路径的正则表达式

day*_*mer 5 java regex split

我试图在Java中执行以下操作,
给出一个目录路径,就像"/a/b/c"我想要获取一个字符串数组一样["a", "b", "c"].代码如下:

private static final String DIRECTORY_PATH_SEPARATOR = "/";  
    Iterator iter = testPaths.iterator();

            String[] directories;

        while( iter.hasNext() ) {

            directories = ( ( String ) iter.next() ).split(DIRECTORY_PATH_SEPARATOR);
        }
Run Code Online (Sandbox Code Playgroud)

但我得到的数组也是空间.我希望得到所有这些字符串length>0.
我怎样才能做到这一点??

Jef*_*ado 4

如果路径以分隔符开头,则您获得空字符串(在有效路径中)的唯一位置将是第一项。如果它有前导分隔符,则在没有它的路径上分割。

String path = "/a/b/c";
String[] directories = path.substring(1).split(DIRECTORY_PATH_SEPARATOR);
// { "a", "b", "c" }
Run Code Online (Sandbox Code Playgroud)

正如 OmnipotEntity 所指出的,我对有效路径的假设是错误的。否则,在使用 时,您必须遍历数组并保留非空字符串split()

String path = "/a/b////c";
String[] split = path.split(DIRECTORY_PATH_SEPARATOR);
ArrayList<String> directories = new ArrayList<String>(split.length);
for (String dir : split)
    if (dir.length() > 0)
        directories.add(dir);
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用实​​际的正则表达式来匹配非分隔符:

String path = "/a/b////c";
ArrayList<String> directories = new ArrayList<String>();
Pattern regex = Pattern.compile("[^" + DIRECTORY_PATH_SEPARATOR + "]+");
Matcher matcher = regex.matcher(path);
while (matcher.find())
    directories.add(matcher.group());
Run Code Online (Sandbox Code Playgroud)