Java字符串不相等

3

所以我有一个字符串数组

String[] faculties = new String[21];

我需要从一个类似于.txt文件的文件中获取学院名称,并将其填充到下面的代码中:

Math & CS; 第一专业; 第一个项目; 等等

Math & CS; 第二专业; 第一个项目; 等等

Math & CS; 第二专业; 第二个项目; 等等

物理学; 第一专业; 第一个项目; 等等

物理学; 第一专业; 第二个项目; 等等

我使用以下代码来获取这些名称:

FileReader input = new FileReader("faculties1.txt");
BufferedReader bufRead = new BufferedReader(input);
String myLine;
int f = 0;

    while((myLine = bufRead.readLine())!= null){
        String[] arr = myLine.split(";");

        if(f == 0){
            faculties[f] = arr[0];
            f++;
        }
        else{
            if(!faculties[f-1].trim().equals(arr[0].trim())){
                faculties[f] = arr[0];
                f++;
            }
        }
    }

但是当我尝试检查我的数组时

for(int i = 0; i < f; i++){
        System.out.println(faculties[i]);
    }

控制台提示我

数学与计算机科学

数学与计算机科学

物理学

我不明白为什么Java第二次将“数学与计算机科学”放入我的数组中。


1
你尝试使用调试器逐步执行它了吗? - litelite
@litelite 是的。即使 arr[0] == "Math & CS"faculties[f-1] == "Math & CS",当 f == 1 时,if(!faculties[f-1].trim().equals(arr[0].trim())) 也会返回 true - slxvxBatih
3
也许文件中有某种看不见的Unicode字符?你可以尝试使用像Notepad++或Sublime Text这样的工具打开文件,并启用显示所有字符选项。 - litelite
3
试着对 faculties[f-1]arr[0] 进行 String.compare 操作,如果返回值不是 0 就表示存在字符问题,正如 @litelite 所说。 - Ishnark
2
@litelite 非常感谢!我在我的项目中使用UTF-8 .txt来查看控制台中的西里尔字母,但当我将.txt更改为ANSI时,控制台会显示“Math&CS Physics”。 - slxvxBatih
你的问题出在“newLine”空行上,可以在文件中查看。每个语句后面都有一个空行,然后再是下一条语句。 尝试将其保存到文件中或在代码中处理空行。 数学与计算机科学;第一专业;第一个程序;等等 数学与计算机科学;第二专业;第一个程序;等等 数学与计算机科学;第二专业;第二个程序;等等 物理学;第一专业;第一个程序;等等 物理学;第一专业;第二个程序;等等 - Vinod
1个回答

1
我尝试过这个,它运行良好,并且输出的结果与您期望的一样,但无论如何,您需要抛出异常。
Math & CS
Physics

根据我的经验,您的文本文件中可能会有拼写错误。请使用不同于Windows记事本的文本编辑器进行检查。
更新:
在添加了此答案后,我看到您在问题中的最后一条评论,表示您的问题已解决。
我添加此评论是因为如果有人没有看到您的评论,这将对他们有所帮助。
引用:
我在我的项目中使用UTF-8 .txt来在控制台中查看西里尔字母,但当我将.txt更改为ANSII时,控制台显示了Math & CS Physics *。

在我回答完这个问题之后,我看到了你在问题中的最后一条评论,说你的问题已经解决了。 - Blasanka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接