If / Else /提取字符串的一部分

时间:2013-09-01 11:57:30

标签: java if-statement

我现在正在做一个项目,并且有点困扰它,

项目标签是:

  

创建一个封装文件概念的类。包括构造函数,getter / setter,toString方法,equals方法。添加的位是我遇到的问题

     

还写一个返回文件扩展名的方法,即最后一个点(。)后面的字母   文件名   如果文件名是hello1.doc,则该方法应返回doc   如果文件名中没有点(。),则该方法应返回“未知扩展名”

到目前为止,我的代码是适当的File类

public class File {

private String fileName;

public File()
{

}

public File(String fn)
{
    this.fileName = fn; 
}


public String getName()
{       
    return this.fileName;
}


public void setName(String name)
{
    this.fileName = name;
}


public String toString()
{
    return fileName;

}


public boolean equals(File f1)
{


    if (f1.getName().equals(fileName))
    {
        return true;
    }
    else
    {
        return false;
    }

}


public  void String(File f1){
    if (f1.toString().contains(".")){
        String h=f1.toString();
        String[] parts = h.split(".");
        String i= parts[0];
        String j= parts[1];
        System.out.println("File is of type"+" "+parts[1]);

    }
    else{
        System.out.println("Unkown file extension.");}

}

}

我完全不知道如何完成这个。我认为问题在于,当我实例化一个新的'file'对象时,字符串不会通过我的最终if / else传递。向正确的方向轻推将非常感激:)

干杯

这里的Ps是我的测试类(我知道if / else应该在上面的主文件中:) :)

public class Filemain {
    public static void main(String[] args) {



        File f1 = new File();

        File f2 = new File ("test.pdf");
        File f3= new File ("results.doc");

        System.out.println(f2);
        System.out.println(f3);



        if (f2.equals(f3))
        {
            System.out.println("You have not got complete documentation");
        }
        else
        {
            System.out.println("You have the complete documentation");



        }

4 个答案:

答案 0 :(得分:2)

我认为问题出在构造函数中

f1.toString()

当你需要做的时候

f1.getName()

加上您的类名已经存在于java中,请尝试使用MyFile代替

最后你要使用

public void toString(File f1)

public void extString(File f1)

而不是

public  void String(File f1)

甚至是编译?

答案 1 :(得分:0)

public void String(File f1){不是有效的构造函数,这是一个不返回任何内容的简单方法。

toString()方法也没有重载,因此它将使用默认实现,而不是文件名。

int lastDot = f1.fileName.lastIndexOf(".");
if (lastDot >= 1) { System.out.println( f1.subString(lastDot); }

如果有扩展程序,将告诉您扩展程序的起始位置并打印扩展程序。

您发布的所有其他代码明智的方式都是不正确的,只是噪音。

答案 2 :(得分:0)

您可以使用正则表达式来提取扩展名:

public String getExtension() {
    if (!fileName.contains("."))
        return "unknown extension";
    return fileName.replaceAll(".*\\.([^.]*)", "$1");
}

虽然这似乎是一种好奇心,但老实说我会如何编码。

答案 3 :(得分:0)

我认为你有一个问题重新编写 - 糟糕的方法/构造函数名称。

对于extn:

String有lastIndexOf,用吗? 5行:

String getExtn()
    int i =  fileName.lastIndexOf(".");//can use last index of character too
    String extn = “unknown extension”;
    if(i > -1 ){
        extn = fileName.subString(i + 1) ;
     }
    return extn;
}

一个边缘的情况是dot是最后一个字符 - 你应该得到一个空的搅拌然后,可以通过检查我是否< fileName len