2

我有几个用 Java 读取的字典文件,在逐行读取它们时,我使用以下代码:

       public static void main(String args[]) { 


    try {

        FileInputStream fstream1 = new FileInputStream("de-DE.dic");
                    DataInputStream in = new DataInputStream(fstream1);
                BufferedReader br = new BufferedReader(new InputStreamReader(in,"UTF-8"));

      String str;
      while ((str = br.readLine()) != null) {
         String str_uc=str.toUpperCase(Locale.GERMAN);
          if(hasApostrophe(str_uc)){
              allletters.add(str_uc);
          if(str.length()==3)
              threeletter.add(str_uc);
          else if(str.length()==4)
              fourletter.add(str_uc);
          else if(str.length()==5)
              fiveletter.add(str_uc);
          else if(str.length()==6)
              sixletter.add(str_uc);
          else if(str.length()==7)
              sevenletter.add(str_uc);
       }
      }
      in.close();

    }
    catch (Exception e) {
      System.err.println(e);
    }

但是,它总是在第一行单词中添加一个空字符,例如,如果第一行中包含三个字母的单词,则将其添加到四字母数组中。我怎样才能防止这种情况发生?谢谢。

添加:

这是文件中的几行:

Aachens
Aachen
Aal
Aale
Aalen
Aales
Aals
Aas
Aases
Aasgeier
Aasgeiern
Aasgeiers
4

3 回答 3

1

可能是正确的修复

Java 有两种类型的流:

二进制流 - 这些可以读取任何类型的数据,但是为了读取数据,您必须知道它是什么类型

文本流 - 这里同意您正在阅读文本

你正在做的是打开一个FileInputStream二进制流的形式,然后用 BufferedReader 装饰它,它首先由 dataInputStream 装饰。

更正确的方法是首先打开 FileReader,然后用 BufferedReader 装饰它(仅在需要时,性能方面)。

请参阅FileReader的 JAVA API

如果您切换到 FileReader,您的“意外”问题将得到解决(这是因为当您认为以二进制格式存储文件时,您从文件中读取字符串的方式,这意味着 DataInput 期望读取这些字符的“指示”是实际字符串之前的字符串)

快速修复 此外,如果您不想切换,您可以随时调用 String 类的trim方法。

另一个快速修复

使用扫描仪代替您打开的所有流,扫描仪接受文件名参数并打开文件,您可以使用扫描仪的 next() 方法并具有非常高级的解析能力,请参阅扫描仪

于 2012-07-06T10:43:00.017 回答
0

编辑:这是一个记事本问题。读这个

利用

String str_uc=str.trim().toUpperCase(Locale.GERMAN);

trim() 将删除行首或行尾的空白字符。

于 2012-07-06T10:50:05.343 回答
0

根据 PC. 的回答,我可能会建议您将文件编码转换为 Notepad++ 中的以下内容

于 2017-04-16T23:11:36.093 回答