有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (6) 个答案

  1. # 1 楼答案

    顺便说一句,在我的例子中,当我想要一个快速的解决方案来删除一个特定的扩展时,我大致就是这么做的:

      if (filename.endsWith(ext))
        return filename.substring(0,filename.length() - ext.length());
      else
        return filename;
    
  2. # 2 楼答案

    String fileName="foo.bar";
    int dotIndex=fileName.lastIndexOf('.');
    if(dotIndex>=0) { // to prevent exception if there is no dot
      fileName=fileName.substring(0,dotIndex);
    }
    

    这是个骗人的问题吗p

    我想不出比atm更快的方法了

  3. # 3 楼答案

    str.substring(0, str.lastIndexOf('.'))
    
  4. # 4 楼答案

    String foo = "title part1.txt";
    foo = foo.substring(0, foo.lastIndexOf('.'));
    
  5. # 6 楼答案

    由于在一行程序中使用String.substringString.lastIndex很好,因此在处理某些文件路径方面存在一些问题

    以以下路径为例:

    a.b/c
    

    使用一个衬里将导致:

    a
    

    这是不对的

    结果应该是c,但由于文件缺少扩展名,但路径有一个名称中带有.的目录,因此单行程序方法被欺骗,将路径的一部分作为文件名,这是不正确的

    需要检查

    skaffman's answer的启发,我研究了Apache Commons IO^{}方法

    为了重现其行为,我编写了新方法应该完成的几个测试,如下所示:

    Path                  Filename
    --------------        --------
    a/b/c                 c
    a/b/c.jpg             c
    a/b/c.jpg.jpg         c.jpg
    
    a.b/c                 c
    a.b/c.jpg             c
    a.b/c.jpg.jpg         c.jpg
    
    c                     c
    c.jpg                 c
    c.jpg.jpg             c.jpg
    

    (这就是我检查的全部内容——我可能忽略了其他检查。)

    实施

    以下是我对removeExtension方法的实现:

    public static String removeExtension(String s) {
    
        String separator = System.getProperty("file.separator");
        String filename;
    
        // Remove the path upto the filename.
        int lastSeparatorIndex = s.lastIndexOf(separator);
        if (lastSeparatorIndex == -1) {
            filename = s;
        } else {
            filename = s.substring(lastSeparatorIndex + 1);
        }
    
        // Remove the extension.
        int extensionIndex = filename.lastIndexOf(".");
        if (extensionIndex == -1)
            return filename;
    
        return filename.substring(0, extensionIndex);
    }
    

    使用上述测试运行这个removeExtension方法可以得到上面列出的结果

    使用以下代码对该方法进行了测试。由于这是在Windows上运行的,因此路径分隔符是\,当用作String文本的一部分时,必须使用\进行转义

    System.out.println(removeExtension("a\\b\\c"));
    System.out.println(removeExtension("a\\b\\c.jpg"));
    System.out.println(removeExtension("a\\b\\c.jpg.jpg"));
    
    System.out.println(removeExtension("a.b\\c"));
    System.out.println(removeExtension("a.b\\c.jpg"));
    System.out.println(removeExtension("a.b\\c.jpg.jpg"));
    
    System.out.println(removeExtension("c"));
    System.out.println(removeExtension("c.jpg"));
    System.out.println(removeExtension("c.jpg.jpg"));
    

    结果是:

    c
    c
    c.jpg
    c
    c
    c.jpg
    c
    c
    c.jpg
    

    结果是该方法应达到的测试中概述的预期结果