Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-从右边剪切一个字符串直到指定字符_Java_String_Cut - Fatal编程技术网

Java-从右边剪切一个字符串直到指定字符

Java-从右边剪切一个字符串直到指定字符,java,string,cut,Java,String,Cut,我有如下字符串,文件路径如下: /Users/Fabian/Desktop/R5X5.mps 我现在只想知道文件名的意思-从右边到“/”的所有内容 在这种情况下:R5X5.mps 最有效的方法是什么 这可以用本机java方法解决,还是需要构建正则表达式 使用正则表达式。这很简单: String last = str.replaceAll(".*/", ""); 这个正则表达式表示“所有内容都向上,包括斜杠”,而斜杠被零替换(实际上是“删除”它) 我认为没有人会用“building”这个词来描述

我有如下字符串,文件路径如下:

/Users/Fabian/Desktop/R5X5.mps

我现在只想知道文件名的意思-从右边到“/”的所有内容

在这种情况下:R5X5.mps

最有效的方法是什么


这可以用本机java方法解决,还是需要构建正则表达式

使用正则表达式。这很简单:

String last = str.replaceAll(".*/", "");
这个正则表达式表示“所有内容都向上,包括斜杠”,而斜杠被零替换(实际上是“删除”它)

我认为没有人会用“building”这个词来描述键入
“*/”
所需的工作量

我现在只想知道文件名的意思

使用适当的类。例如,Java提供:

String name = new File("/Users/Fabian/Desktop/R5X5.mps").getName();
您也可以使用

String path = "/Users/Fabian/Desktop/R5X5.mps";
String name = path.substring(path.lastIndexOf("/") +1); // "+1" since we don't
                                                        // want to include `/` in result
(这基本上就是
文件#getName
所做的)

在我看来,使用是最好的方式。
FilenameUtils
类是的一部分

根据文档,该方法“将处理Unix或Windows格式的文件”。“返回最后一个正斜杠或反斜杠后的文本”作为字符串对象

String filename = "/Users/Fabian/Desktop/R5X5.mps";
String name = FilenameUtils.getName(filename);
System.out.println(name);

上面的代码打印
R5X5.mps

关于
s.substring(s.lastIndexOf('/')、s.length())
呢?您是否尝试过任何操作?如果它始终是一个文件路径,则最简单的方法可能是
新建文件(您的字符串)
,然后
file.getName()
它几乎可以正常工作,然后输出为:/R5X5。mps@ale64bit或者干脆
s.substring(s.lastIndexOf('/')+1)
@Andreas绝对!我怎么会错过呢?:)当
str.substring(str.lastIndexOf(“/”)+1)
可以做到这一点时,有点过分了。即使字符串中不存在
/
也可以工作,与
replaceAll()
相同。谢谢,这就是我要找的@安德烈亚斯,为什么这样做太过分了?它的代码比您建议的方法少,并且执行此代码所需的时间不到2微秒。到底是什么问题呢?
lastIndexOf
的参数不是一个
char
吗?@ale64位不太合适,
lastIndexOf
接受两种类型的参数:
int
,表示字符的Unicode码点(我们也可以在这里传递
char
like
'/'
,让编译器将其视为
int
)或
String
,如本例所示。@ale64位可以是
char
(实际上是codepoint
int
)或
String
。两者都可以,但
char
在这里更好(更快)@Pshemo mmm,因为Java 8。很高兴知道。@ale64bit“因为Java 8”是什么意思?
lastIndexOf(String)
至少从1.4.2()开始就在Java中,我不确定它是否从一开始就在那里(在进一步搜索后,我找到了这篇1.0.2文档)。