我有一个字符串:
/abc/def/ghfj/ijk/lmn.doc
我想从中提取 ghfj 。
我试着这样做:str.substring(str.indexOf("/",9),str.indexOf("/"));
有人可以提供一些帮助吗?
答案 0 :(得分:1)
假设您正在尝试查找指定文件的父位置,最简单的方法是使用File
类或Path
而不是String方法。您的代码将更具可读性,可能更安全。
使用java.io.File
:
String location = "/abc/def/ghfj.doc";
File f = new File(location);
String parentName = f.getParentFile().getName();
System.out.println(parentName);
使用java.nio.file.Path
:
String location = "/abc/def/ghfj.doc";
Path p = Paths.get(location);
String parent = p.getParent().getFileName().toString();
System.out.println(parent);
两种情况下的输出:def
如果在def
中选择/abc/def/ghfj/ijk/lmn.doc
,您可以使用Path#getName(N)
,其中N
是从最远的祖先到所选文件的基于零的索引,如{{1} } abc
,0
是def
,...
所以你的代码看起来像:
1
答案 1 :(得分:0)
使用正则表达式和组的快速而肮脏的解决方案:
public class AClass {
private static final String TEXT = "/abc/def/ghfj/ijk/lmn.doc";
private static final String REGULAR_EXPRESSION = "(/[^/]*){2}/([^/]*)/.*";
public static void main(final String[] args) {
final Pattern pattern = Pattern.compile(REGULAR_EXPRESSION);
final Matcher matcher = pattern.matcher(TEXT);
if (matcher.matches()) {
// the following variable holds "ghfj"
String value = matcher.group(2);
System.out.println(value);
}
}
}
现在你需要更加精确,以便我们能够根据你的具体需要微调正则表达式。
编辑:我根据您自己的编辑编辑了解决方案。正则表达式必须理解如下:
(/[^/]*){2}
:字符/
的两倍,后跟除/
/
:另一个/
字符([^/]*)
:一组不包含/
/.*
:/
字符,后跟任何其他字符然后matcher.group(2)
返回由上述正则表达式的([^/]*)
部分表示的组所持有的字符串。