2

我尝试逐字符读取文件字符。不幸的是,Java 在从文件中读取字符时会忽略 EOF。

FileReader fileReader = new FileReader(fileText);
char c;
String word = "";
List<String> words = new ArrayList<String>();

while ((c = (char) fileReader.read()) != -1) {
    System.out.println(c);
    if (c != ' ') {
        word = word + c;
    }
    else {
        words.add(word + " ");
        word = "";
    }
}

它应该在读取文件后分解,但它永远不会停止运行....

4

3 回答 3

8

在 Java 中,char是无符号的,不能等于-1。您应该在进行演员表之前进行比较。

int ch;
while ((ch = fileReader.read()) != -1) {
    char c = (char)ch;
    System.out.println(c);
    ...
}
于 2012-12-11T17:55:51.137 回答
4

发生这种情况是因为char不能等于-1,即使您分配-1给它:

char c = (char)-1;
System.out.println(c == -1); // prints false

制作c,intchar仅在您连接时将其转换为:

word = word + (char)c;

更好的是,用于StringBuilder在运行时构建字符串:否则,您会在循环中创建大量临时字符串对象,而这些对象会被丢弃。

StringBuilder word = new StringBuilder();
List<String> words = new ArrayList<String>();
int c;
while ((c = fileReader.read()) != -1) {
    System.out.println((char)c);
    word.append((char)c);
    if (c == ' ') {
        words.add(word.toString());
        word = new StringBuilder();
    }
}
于 2012-12-11T17:56:08.797 回答
2

你应该试试下面的代码

public static void main(String[] args) throws IOException {
    FileReader fileReader = new FileReader(fileLocation);
    int c;
    String word = "";
    List<String> words = new ArrayList<String>();

    while ((c = (int) fileReader.read()) != -1) {
        System.out.println((char)c);
        char ch = (char)c;
        if (ch != ' ') {
            word = word + ch;
        } else {
            words.add(word + " ");
            word = "";
        }
    }
    System.out.println(word);
}
于 2012-12-11T18:00:08.897 回答