gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:10:14 27 4
gpt4 key购买 nike

我有几个用 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 来装饰它,而 BufferedReader 首先由一个 dataInputStream 来装饰。

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

请参阅 FileReader 的 JAVA API

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

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

另一个快速修复

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

关于java - Java读取文件时如何避免在开头添加一个空字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11360621/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com