Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在句子中选择特定的单词或短语_Java_String_Substring - Fatal编程技术网

Java 在句子中选择特定的单词或短语

Java 在句子中选择特定的单词或短语,java,string,substring,Java,String,Substring,我有一个文件,当Java FileReader读取时,它会打印(println)一组文件目录,其格式如下: Z:\123456_tre\12345.mpg;0;2343;3423;43234 我需要找到一种方法,以便自动获取文件名(12345.mpg),该文件名位于该行第二个反斜杠“\”和第一个分号“之间 我相信我必须使用正则表达式来实现这一点,但我还没有意识到这一点 我想用一个计数器变量来计算所有的斜杠。当计数器==2时,获取以下字符串,直到它到达分号,然后停止。然后返回读取的字符串 任何帮助

我有一个文件,当Java FileReader读取时,它会打印(println)一组文件目录,其格式如下:

Z:\123456_tre\12345.mpg;0;2343;3423;43234

我需要找到一种方法,以便自动获取文件名(12345.mpg),该文件名位于该行第二个反斜杠“\”第一个分号“之间

我相信我必须使用正则表达式来实现这一点,但我还没有意识到这一点

我想用一个计数器变量来计算所有的斜杠。当计数器==2时,获取以下字符串,直到它到达分号,然后停止。然后返回读取的字符串

任何帮助都将不胜感激!多谢各位

这可能有用:


只需调整到解决方案的第一个斜杠和分号即可

欢迎来到stackoverflow

当然,您可以使用正则表达式,但是在这种情况下,您最好使用字符串函数,因为对于像这样简单的事情,它们比正则表达式快得多

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(换行符)等特殊情况。。。因此,要在搜索函数中使用反斜杠本身,必须将其转义

这也是首选的拆分解决方案,因为您不知道文件名的深度。这个解决方案应该适用于所有人

 z:/directory/directory2/directory4/file.mpg;xxxxx

试试这个

        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()));

尝试使用
String.split()


你当然可以这样做,但正则表达式将是一个更干净的解决方案。谢谢!我又在复习regex干酪单了!哈哈,如果你不去想它,它会让你很困惑:)这太棒了!!我有.lastIndexOf来确定“\”的最后一次出现,但不知道之后该怎么办。谢谢你多跑了一英里,并用双反斜杠分享了一些信息。我希望我能投赞成票,但我现在还不能1.别担心,被接受的答案就足够了。很乐意帮忙!
        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()));
String input  = "Z:\\123456_tre\\12345.mpg;0;2343;3423;43234";
String output = input.split(";")[0].split("\\")[2];