如何在Java之前获取字符串。(点)和/之后/(最后)斜杠?

我有一个像这样的字符串:

"core/pages/viewemployee.jsff" 

从这段代码中,我需要获得“viewemployee”。 我如何使用Java获得此function?

您可以使用正则表达式解决此问题(假设您只需要在最后一个“/”和“。”之间使用一组单词字符):

  String str="core/pages/viewemployee.jsff"; str=str.replaceFirst(".*/(\\w+).*","$1"); System.out.println(str); //prints viewemployee 

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

 String myString = "core/pages/viewemployee.jsff"; String newString = myString.substring(myString.lastIndexOf("/")+1, myString.indexOf(".")); 

但是你需要在这个substring之前进行相同的控制,因为如果没有那些你将从lastIndexOf()得到的字符,或者indexOf()一个“-1”将破坏你的substring调用。

我建议你去寻找Javadoc文档 。

您可以先使用“/”拆分字符串,这样就可以将每个文件夹和文件名分开。 对于此示例,您将拥有“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" 

下面将为您提供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 ; 

这些是文件路径,对吧? 考虑使用File.getName(),尤其是如果您已经拥有File对象:

 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()将这些视为分隔符,并忽略它们。 除非原始字符串是,否则数组将始终具有一个元素.