【问题标题】:File.getName() not comparing properly to a String [duplicate]File.getName() 没有正确比较字符串 [重复]
【发布时间】:2014-12-14 04:54:06
【问题描述】:

我在一个类中有一个 arrayList 和一个 getter。我需要创建一个方法,该方法返回一个 arrayList,其中填充了第一个 arrayList 中与 String arg 同名的所有文件。这就是我想出的。

ArrayList<File> dirs = new ArrayList<File>(); // filled with files

public ArrayList<File> getDirectoriesNamed(String fileName) {
    ArrayList<File> files = new ArrayList<File>();
    for (File file : dirs) {
        if (file.getName() == fileName) //problem is here
            files.add(file);
    }
    return files;
}

但是,当我尝试这个时,我得到一个空数组列表。我发现原因是因为 if 语句......有什么理由不应该工作,我没有看到?

【问题讨论】:

  • 我刚刚意识到这个问题很重复......

标签: java string if-statement arraylist


【解决方案1】:

您将两个字符串与 '==' 进行比较,请使用 file.getName().equals(fileName)

【讨论】:

  • 标记为重复。
  • 投了反对票,因为我已经回答了正确的答案,但问题是重复的?好像有点不公平吧?
  • 是的,这就是为什么我只给你留言。然而,这里的许多人非常不愿意回答这样的问题,这些问题每天都会被问很多次,而且(对大多数人来说)显然是重复的。
【解决方案2】:

两件事...

1) 确保包含扩展名,例如 filename.txt 作为字符串文件名。

2) 如果对象是字符串并且您担心大小写存在 .equalsIgnoreCase(),则应将对象与 .equals() 进行比较。我很确定 == 对你来说不是问题,即使对象应该以不同的方式进行比较 == 在 java 中确实适用于某些字符串对象。请注意,仅仅因为它有效并不意味着它是正确的。

【讨论】:

  • 扩展不是问题,但感谢 .equals()。这有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多