我有一个这样的字符串:
"core/pages/viewemployee.jsff"
从这段代码中,我需要获得“viewemployee”。我如何使用Java获得此功能?
答案 0 :(得分:19)
您可以使用正则表达式解决此问题(假设您只需要在最后一个“/”和“。”之间使用一组单词字符):
String str="core/pages/viewemployee.jsff";
str=str.replaceFirst(".*/(\\w+).*","$1");
System.out.println(str); //prints viewemployee
答案 1 :(得分:19)
假设您将该字符串保存在名为myString
的变量中。
String myString = "core/pages/viewemployee.jsff";
String newString = myString.substring(myString.lastIndexOf("/")+1, myString.indexOf("."));
但是你需要在这个substring
之前做同样的控制,因为如果你没有从lastIndexOf()
或indexOf()
获得这些字符,那么#&# 34; -1"这将破坏您的substring
调用。
我建议您查找Javadoc documentation。
答案 2 :(得分:8)
您可以先使用" /"分割字符串。这样你就可以让每个文件夹和文件名分开。对于这个例子,你将拥有"核心","页面"和" 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"
答案 3 :(得分:8)
这些是文件路径,对吧?考虑使用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()将这些视为分隔符,并忽略它们。除非原始字符串是.
,否则数组将始终具有一个元素。
答案 4 :(得分:6)
下面会给你 viewemployee.jsff
int idx = fileName.replaceAll("\\", "/").lastIndexOf("/");
String fileNameWithExtn = idx >= 0 ? fileName.substring(idx + 1) : fileName;
删除文件Extension并仅获取 viewemployee ,类似地
idx = fileNameWithExtn .lastIndexOf(".");
String filename = idx >= 0 ? fileNameWithExtn.substring(0,idx) : fileNameWithExtn ;