Java逐行读取文件而不是正确读取行

时间:2014-10-16 13:48:01

标签: java

我已经在文本文件中保存了一些好的推文,格式如下:

Country:Brazil_result.txt Date: \r\n09/19/14 TweetTextExtract: #Brazil on track to becoming the leader of #wind #energy production in Latin America http://t.co/MFJjNPxodf
Country:Brazil_result.txt Date: \r\n09/19/14 TweetTextExtract: @ConceptOfficial FOLLOW ME GUYS PLEASE I LOVE YOU SO MUCH BRAZIL LOVE YOUx16
Country:Brazil_result.txt Date: \r\n09/19/14 TweetTextExtract: @JamesFenn90 plenty teams travelled far more in Brazil from their bases to each game.I'm sure eng can manage a trip to Amsterdam etc etc

现在我要做的是从文本文件中逐行读取然后按"TweetTextExtract: "拆分行,但由于某种原因,我一直收到ArrayIndexOutOfBoundsException:1错误,我可以' t看看为什么每一行都有"TweetTextExtract: "项。这是控制台中的错误:

Country:Brazil_result.txt Date: \r\n09/19/14 @ConceptOfficial FOLLOW ME GUYS 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
    at WhatToThink.main(WhatToThink.java:28)

这条推文的行有"TweetTextExtract: "个术语,继续它的行也是如此。我不确定为什么这会破裂。这是代码:

String folderPath = "C:/Users/me/workspace/Sentiment Analysis/Good Data";

        File fin = new File(folderPath + "/Brazil_result" + ".txt");
        FileInputStream fis = new FileInputStream(fin);
        BufferedReader br = new BufferedReader(new InputStreamReader(fis));

        String line = null;
        while ((line = br.readLine()) != null) {
            String[] stringline = line.split("TweetTextExtract: ");
            System.out.println(stringline[0] + stringline[1]);
            //System.out.println(line);
        }

        br.close();

3 个答案:

答案 0 :(得分:1)

当我运行它时,它实际上并没有为我提供异常。但是如何通过在splited String中动态打印元素来避免此错误。以下增强循环将为您提供相同的结果..

String[] stringline = line.split("TweetTextExtract: ");
for (String s : stringline) {
            System.out.print(s);
} 
System.out.println("");

你可以通过查看结果找到你自己在stringline数组中存在多少元素。

答案 1 :(得分:1)

您的问题几乎肯定是您的文件的错误文本编码。将文件保存为UTF-8(或UTF-16),然后使用

new InputStreamReader(fis, "UTF-8") //or UTF-16

如果您在上述构造函数中使用的编码与文本文件中的编码不匹配,则会出现乱码,然后split即使在第一行也无效。

如果你想保留文本文件的原始编码,只需找出它是什么并改为使用它。

答案 2 :(得分:0)

你可以使用类似的东西:

if (line.contains("TweetTextExtract: ")){
     String[] stringline = line.split("TweetTextExtract: ");
     System.out.println(stringline[0] + stringline[1]);
}
else{
     System.out.println("Line doesn't't contain \"TweetTextExtract: \"");
}