FilenameUtils.getExtension比较返回false

Moo*_*sez 2 java csv swing jfilechooser string-comparison

我对这种比较感到非常困惑FilenameUtils.getExtension.

我有一个文件选择器fc,我想确保扩展名是.csv.

JFileChooser fc = new JFileChooser();
if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION &&
    fc.getSelectedFile().isFile() &&
    FilenameUtils.getExtension(fc.getSelectedFile().getName()) == "csv") {
    // Do stuff
}
Run Code Online (Sandbox Code Playgroud)

经过一些调试后,我发现最后一个语句负责没有执行if语句.

FilenameUtils.getExtension(fc.getSelectedFile().getName()) == "csv"
Run Code Online (Sandbox Code Playgroud)

但是我做了很多,System.out.println()并得到了

System.out.println(FilenameUtils.getExtension(fc.getSelectedFile().getName()));
Run Code Online (Sandbox Code Playgroud)

打印csv.但是当我输入时仍然返回false:

System.out.println(FilenameUtils.getExtension(fc.getSelectedFile().getName()) == "csv");
Run Code Online (Sandbox Code Playgroud)

Par*_*alo 6

你无法比较字符串的内容==.你必须使用这个equals(...)方法:

System.out.println(FilenameUtils.getExtension(fc.getSelectedFile().getName()).equals("csv"));
Run Code Online (Sandbox Code Playgroud)


Fel*_*ber 6

您面临的问题是众所周知的问题。您正在尝试将字符串与 == 运算符进行比较。取而代之的是,您应该使用String的equals 函数

这两种方式之间有一点区别:如果您愿意,可以阅读此问题,并有答案以了解两者之间的区别。

应用于该代码它应该是这样的:

System.out.println(FilenameUtils.getExtension(fc.getSelectedFile().getName()).equals("csv"));
Run Code Online (Sandbox Code Playgroud)

希望有帮助!