我尝试找到一个正则表达式以提取文件名。我的字符串是path/string.mystring
举个例子
totot/tototo/tatata.tititi/./com.myString
我试着得到myString
.
我试过了 String[] test = foo.split("[*.//./.]");
此处已回答了类似的问题。我会说使用正则表达式来获取文件名是错误的方式(例如,如果您的代码曾经尝试针对 Windows 文件路径运行,那么您的正则表达式中的斜杠将是错误的方式) - 为什么不只是利用:
new File(fileName).getName();
获取文件名,然后使用更简单的拆分提取您想要的文件名部分:
String[] fileNameParts = foo.split("\\.");
String partThatYouWant = fileNameParts [fileNameParts.length - 1];
你可以用这个得到最后一句话:\w+$
我的字符串是 path/string.mystring
如果您的字符串模式按照上述规则固定,那么如何:
string.replaceAll(".*\\.","")
如果你想分割句点或斜线,正则表达式应该是
foo.split("[/\\.]")
或者,您可以这样做:
String name = foo.substring(foo.lastIndexOf('.') + 1);
试试这个代码:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Regexp
{
public static void main(String args[])
{
String x = "totot/tototo/tatata.tititi/./com.myString";
Pattern pattern = Pattern.compile( "[a-z0-9A-Z]+$");
Matcher matcher = pattern.matcher(x);
while (matcher.find())
{
System.out.format("Text found in x: => \"%s\"\n",
matcher.group(0));
}
}
}
使用&的非正则表达式解决方案将是。String#subString
String#lastIndexOf
String path="totot/tototo/tatata.tititi/./com.myString";
String name = path.substring(path.lastIndexOf(".")+1);
也许您应该只使用 String API。像这样的东西:
public static void main(String[] args){
String path = "totot/tototo/tatata.tititi/./com.myString";
System.out.println(path.substring(path.lastIndexOf(".") + 1));
}
它适合你的情况吗?使用索引有很多问题。但是,如果您始终确定会有一个.
,您可以毫无问题地使用它。