如何在Java中获取斜杠前后的字符串?

如何在Java中获取斜杠前后的字符串?,java,Java,我有这样一个字符串: "core/pages/viewemployee.jsff" 从这段代码中,我需要得到“viewemployee”。如何使用Java实现此功能?您可以先用“/”拆分字符串,这样就可以将每个文件夹和文件名分开。对于本例,您将有“core”、“pages”和“viewemployee.jsff”。我假设您需要不带扩展名的文件名,所以只需对最后一个标记应用带“.”分隔符的相同拆分操作即可。您将拥有不带扩展名的文件名 String myStr = "core/pages/view

我有这样一个字符串:

"core/pages/viewemployee.jsff"

从这段代码中,我需要得到“viewemployee”。如何使用Java实现此功能?

您可以先用“/”拆分字符串,这样就可以将每个文件夹和文件名分开。对于本例,您将有“core”、“pages”和“viewemployee.jsff”。我假设您需要不带扩展名的文件名,所以只需对最后一个标记应用带“.”分隔符的相同拆分操作即可。您将拥有不带扩展名的文件名

String myStr = "core/pages/viewemployee.bak.jsff";

String[] tokens = myStr.split("/");
String[] fileNameTokens = tokens[tokens.length - 1].split("\\.");

String fileNameStr = "";

for(int i = 0; i < fileNameTokens.length - 1; i++) {
    fileNameStr += fileNameTokens[i] + ".";
}

fileNameStr = fileNameStr.substring(0, fileNameStr.length() - 1);

System.out.print(fileNameStr) //--> "viewemployee.bak"
String myStr=“core/pages/viewemployee.bak.jsff”;
String[]tokens=myStr.split(“/”);
字符串[]fileNameTokens=tokens[tokens.length-1]。拆分(“\\”;
字符串fileNameStr=“”;
for(int i=0;i“viewemployee.bak”

您可以使用regex解决这个问题(假设您只需要最后一个“/”和“.”之间的一组单词字符):


下面将显示viewemployee.jsff

int idx = fileName.replaceAll("\\", "/").lastIndexOf("/");
String fileNameWithExtn =  idx >= 0 ? fileName.substring(idx + 1) : fileName;
要删除文件扩展名并仅获取viewemployee,请执行类似操作

idx = fileNameWithExtn .lastIndexOf(".");
String filename = idx >= 0 ? fileNameWithExtn.substring(0,idx) : fileNameWithExtn ;

假设将该字符串保存在名为
myString
的变量中

String myString = "core/pages/viewemployee.jsff";
String newString = myString.substring(myString.lastIndexOf("/")+1, myString.indexOf("."));      
但在本例中执行
子字符串之前,您需要进行相同的控制,因为如果没有从
lastIndexOf()
indexOf()
a“-1”中获得的字符,则会中断
子字符串的调用


我建议您查找。

这些是文件路径,对吗?考虑使用文件.GETNAMEL(),特别是如果已经有了文件对象:

File file = new File("core/pages/viewemployee.jsff");
String name = file.getName(); // --> "viewemployee.jsff"
以及删除分机:

String res = name.split("\\.[^\\.]*$")[0]; // --> "viewemployee"
有了它,我们可以处理像
“./viewemployee.2.jsff”
这样的字符串


正则表达式匹配最后一个点、零个或多个非点以及字符串的结尾。然后String.split()将它们视为分隔符,并忽略它们。数组将始终有一个元素,除非原始字符串是

,您需要阅读正则表达式教程。注释字段太小,无法解释所有内容。第一部分,即“*/”匹配所有内容,直到最后一个/,然后是分组(\\W+),表示至少一个单词字符,然后停止。因为点不是一个单词字符。又是最后一部分。*意味着一切。在替换部分中,我只是用数字$1来指代该组。由于只有一个组(\\w+)我使用$1。这是java的regex api:在例如“foo.exe”(无斜杠)和“/foo/bar.baz.exe”(两个点)…和“/2014-05-23.log”(或文件名中带有标点符号的任何其他内容)上,这将失败。答案是问题中的给定示例。对于数值和其他类型的值,您需要使用适当的字符类。@SuprabhatBiswal-它是“正则表达式”或“正则表达式”,但肯定不是“正则表达式”。这就像说“正则表达式”。正则表达式只会返回文件名的第一段,其中包含多个点,例如“core/pages/viewemployee.jsff.bak”。你是对的,但即使是这样,通过这段代码,他也会得到文件名,而不带扩展名。即使该文件是备份文件,他仍然会得到他希望得到的文件名“viewemployee”。通常,至少对于程序关联,扩展名是最后一个点之后的任何内容,而不是第一个点。除此之外,就大多数文件系统而言,实际上还没有扩展的概念。但我承认你并不清楚OP想要什么。@johncip这个答案投了赞成票,所以我进来看你是对的,我的答案应该更新。这似乎是一个有效的问题,为什么投反对票?@user3560827
String res = name.split("\\.[^\\.]*$")[0]; // --> "viewemployee"