Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何避免在Java中读取文件时在开头添加一个空字符?_Java_File_Line By Line - Fatal编程技术网

如何避免在Java中读取文件时在开头添加一个空字符?

如何避免在Java中读取文件时在开头添加一个空字符?,java,file,line-by-line,Java,File,Line By Line,我有几个用Java阅读的字典文件,在逐行阅读时,我使用以下代码: public static void main(String args[]) { try { FileInputStream fstream1 = new FileInputStream("de-DE.dic"); DataInputStream in = new DataInputStream(fstream1);

我有几个用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

可能是正确的修复方法

Java有两种流:

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

文本流-此处同意您正在阅读文本

您要做的是打开一个
FileInputStream
,它是二进制流的一种形式,然后用一个BufferedReader对其进行修饰,该程序首先由一个dataInputStream进行修饰

更正确的方法是首先打开一个文件读取器,然后用BufferedReader对其进行修饰(只有在需要的情况下,性能方面)

有关详细信息,请参见JavaAPI

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

快速修复 另外,如果您不想切换,您总是可以调用String类的方法

另一个快速解决方案


使用scanner而不是您正在打开的所有流,scanner接受一个filename参数并打开文件,您可以使用scanner的next()方法并具有非常高级的解析功能,请参见编辑:这是记事本问题。阅读

使用


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

根据PC的回答,我建议您在记事本中将文件编码转换为以下格式++


显示要读取的文件中的几行readtrim()不起作用。仍然在第一行向单词添加空字符。你能试着找出那个字符是什么吗?使用-System.out.println((int)str.charAt(0))这就是为什么我在int值中添加了类型转换。这将打印字符的ASCII值。这对您有帮助吗?谢谢谢谢谢谢,PC=)我在notepad++中将编码改为“Turn UTF-8 With BOM”,结果成功了。=)我想读取UTF-8格式的文件。如何添加扫描仪?新扫描仪(“de-de.dic”、“UTF-8”);不。扫描器也是如此。使用Java8,
FileReader
trim
方法对我来说都很有效。所有这些解决方案都无法去除空字符(char值=65279)
String str_uc=str.trim().toUpperCase(Locale.GERMAN);