Java:从特定字符后开始的字符串中获取子字符串
我有一个字符串:Java:从特定字符后开始的字符串中获取子字符串,java,string,substring,Java,String,Substring,我有一个字符串: /abc/def/ghfj.doc 我想从中提取ghfj.doc,即最后一个/后的子字符串,或从右侧提取第一个/ 有人能提供一些帮助吗?一个非常简单的实现,包括: String-example=“/abc/def/ghfj.doc”; System.out.println(example.substring(example.lastIndexOf(“/”)+1)); 你试过什么? 很简单: String s = "/abc/def/ghfj.doc"; s.substring
/abc/def/ghfj.doc
我想从中提取ghfj.doc
,即最后一个/
后的子字符串,或从右侧提取第一个/
有人能提供一些帮助吗?一个非常简单的实现,包括:
String-example=“/abc/def/ghfj.doc”;
System.out.println(example.substring(example.lastIndexOf(“/”)+1));
你试过什么?
很简单:
String s = "/abc/def/ghfj.doc";
s.substring(s.lastIndexOf("/") + 1)
我认为如果我们直接使用split函数会更好
String toSplit = "/abc/def/ghfj.doc";
String result[] = toSplit.split("/");
String returnValue = result[result.length - 1]; //equals "ghfj.doc"
您可以使用Apache commons: 对于上次出现后的子字符串,请使用方法
对于第一次出现后的子字符串,等效方法是。这也可以获得文件名
import java.nio.file.Paths;
import java.nio.file.Path;
Path path = Paths.get("/abc/def/ghfj.doc");
System.out.println(path.getFileName().toString());
将打印ghfj.doc
另一种方法是使用
如果将null传递给此方法,它将返回null。如果与分隔符不匹配,它将返回空字符串。在Kotlin中,您可以使用
substringAfterLast
,指定分隔符
val string = "/abc/def/ghfj.doc"
val result = url.substringAfterLast("/")
println(result)
// It will show ghfj.doc
从:
返回最后一次出现分隔符后的子字符串。如果字符串不包含分隔符,则返回默认为原始字符串的missingDelimiterValue
要做到这一点:
最终配置拆分器
并使用
Splitter.on("/")
.trimResults()
.omitEmptyStrings()
...
还可以查看和java android 就我而言 我想从 ~/propic/…png /propic/之后的任何内容都与之前的内容无关 ……巴布亚新几内亚 最后,我在中找到了代码 这是密码
public static String substringAfter(final String str, final String separator) {
if (isEmpty(str)) {
return str;
}
if (separator == null) {
return "";
}
final int pos = str.indexOf(separator);
if (pos == 0) {
return str;
}
return str.substring(pos + separator.length());
}
听着,我理解在提问之前自己寻找答案的价值,但事实是这个问题让我的搜索变得容易多了。。这正是我第一次击中后想要的。比查阅javadocs更快。这个问题在这里很好。为什么反对票?虽然这与您最初的问题有些不同:在您的示例中,org.apache.commons.io.FilenameUtils.getBaseName比您自己的字符串操作可靠得多。@Eric我完全同意您的评论,因为这是我问题的第一个Google结果,被接受的答案正是我想要的需要使用。最后一些非常方便的东西,不知道这个方法。我讨厌和substring+indexof+1-2+3之类的东西争论。这更干净:)如果你想在Android上使用这种方法,你必须导入
StringUtils
library,这个答案显示了做这件事的热度:工作完美无瑕!如果找不到分隔符,此代码将抛出一个错误。@PatrickParker为什么到处都评论说如果找不到分隔符,它将抛出一个错误。如果你是出于知识的目的而做的,那就好了,但我只是觉得这可能有点太多了…@GauravMall我正在帮助人们改进答案,编写更好的代码,并帮助来访者在粘贴代码之前避免陷阱并建立对代码的理解。一旦答案得到改进,我将很乐意删除我的评论。此外,在两个地方写它也很难“无处不在”。最后,注释部分不用于元讨论。如果未找到分隔符,此代码将抛出数组索引越界错误。请注意,由于为每个分割点创建了额外的对象,此解决方案可能不是非常有效。@Vadzim Correct。这是应该考虑的。也可以看到这个讨论:完美无瑕!
String id="/abc/def/ghfj.doc";
String valIfSplitIsEmpty="";
return Iterables.getLast(Splitter.on("/").split(id),valIfSplitIsEmpty);
Splitter.on("/")
.trimResults()
.omitEmptyStrings()
...
public static String substringAfter(final String str, final String separator) {
if (isEmpty(str)) {
return str;
}
if (separator == null) {
return "";
}
final int pos = str.indexOf(separator);
if (pos == 0) {
return str;
}
return str.substring(pos + separator.length());
}