我试图在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.
我怎样才能做到这一点??
如果路径以分隔符开头,则您获得空字符串(在有效路径中)的唯一位置将是第一项。如果它有前导分隔符,则在没有它的路径上分割。
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)