【问题标题】:How to retrieve particular part of string如何检索字符串的特定部分
【发布时间】:2012-08-17 11:22:13
【问题描述】:

我有一个目录列表作为字符串,我想检索字符串的特定部分,唯一的事情是,因为这是一个目录,它可以改变长度

我想从字符串中检索文件名

"C:\projects\Compiler\Compiler\src\JUnit\ExampleTest.java"
"C:\projects\ExampleTest.java"

所以在这两种情况下,我只想检索ExampleTest(文件名也可以更改,所以我需要获取第一个.之前和最后一个\之后的文本)。有没有办法使用正则表达式或类似的东西来做到这一点?

【问题讨论】:

  • 如果您首先展示您的努力成果并告诉我们为什么它不起作用,这不是对所有参与者最好的吗?因此,what have you tried?

标签: java regex string


【解决方案1】:

为什么不使用 Apache Commons FileNameUtils 而不是编写自己的正则表达式?来自文档:

这个类在一个文件名中定义了六个组成部分(例如 C:\dev\project\file.txt):

the prefix - C:\
the path - dev\project\
the full path - C:\dev\project\
the name - file.txt
the base name - file
the extension - txt

使用它会好很多。它直接面向文件名、目录等,并且鉴于它是一个常用的、定义明确的组件,它将经过广泛的测试并消除边缘情况等。

【讨论】:

    【解决方案2】:
    new File(thePath).getName()
    

    或

    int pos = thePath.lastIndexOf("\\");
    return pos >= 0? thePath.substring(pos+1): thePath;
    

    【讨论】:

      【解决方案3】:
      File file = new File("C:\\projects\\ExampleTest.java");
      System.out.println(file.getAbsoluteFile().getName());
      

      【讨论】:

        【解决方案4】:

        Java 代码

        String test = "C:\\projects\\Compiler\\Compiler\\src\\JUnit\\ExampleTest.java";
        String arr[] = test.split("\\Q"+"\\");
        System.out.println(arr[arr.length-1].split("\\.")[0]);
        

        【讨论】:

          【解决方案5】:

          这是c# 中的正则表达式,它也适用于java :P。感谢Perl。它在组中匹配[1]

          ^.*\\(.*?)\..*?$
          

          【讨论】:

          • 决定使用 FileNameUtils,但答案很简单……+1
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-11-10
          • 2022-06-14
          • 1970-01-01
          • 2019-07-14
          • 2022-01-18
          • 2011-09-17
          • 2012-01-06
          相关资源
          最近更新 更多