我有一个文件,当由Java FileReader读取时,打印(println)一堆文件目录,格式为:
Z:\ 123456_tre \ 12345.mpg; 0; 2343; 3423; 43234
我需要找到一种方法,以便我可以自动获取文件名( 12345.mpg ),它位于第二个反斜杠“之间“和第一个半冒号”; 在该行
我相信我必须使用正则表达式来实现这一点,但光还没有发现。
我正在考虑使用计数器变量来计算所有斜杠。当counter == 2时,取下面的字符串直到它达到分号然后停止。然后返回读取的字符串。
任何帮助都将得到充分的赞赏!非常感谢你!
答案 0 :(得分:1)
欢迎来到stackoverflow!
你当然可以使用RegEx'es,但在这种情况下,你最好使用String函数,因为它们比RegEx快得多,就像这样简单。
Java提供了一个方便的函数: String.lastIndexOf ,它将搜索字符的最后一次出现,所以:
String stuff="Z:\\123456_tre\\12345.mpg;0;2343;3423;43234";
getFilename(stuff); // will get the filename
public String getFilename(String fullFilename) {
String filename=fullFilename.substring(fullFilename.lastIndexOf("\\")+1); // this will get 12345.mpg;0;2343;3423;43234
return filename.substring(0,filename.indexOf(";"));
}
为什么双反斜杠? (\\)
在Java和大多数编程语言中,反斜杠是一个“转义字符”,用于特殊事物,如\ n(新行),\ r \ n(换行符)等...所以要使用在搜索功能中反斜杠本身,你必须逃避它。
这也是拆分解决方案的首选,因为您不知道文件名的深度。该解决方案适用于
z:/directory/directory2/directory4/file.mpg;xxxxx
或
z:/directory4/file.mpg;xxxxx
答案 1 :(得分:0)
答案 2 :(得分:0)
试试这个,
String name = "Z:\\123456_tre\\12345.mpg;0;2343;3423;43234";
int end = name.indexOf(";");
String extracted = name.substring(0, end);
System.out.println(extracted.substring(extracted.lastIndexOf("\\") + 1, extracted.length()));
答案 3 :(得分:0)
尝试String.split()
,
String input = "Z:\\123456_tre\\12345.mpg;0;2343;3423;43234";
String output = input.split(";")[0].split("\\")[2];