【问题标题】:Reading txt files and display the data with a line break读取txt文件并用换行符显示数据
【发布时间】:2015-06-28 22:22:48
【问题描述】:

这是我读取 txt 文件的代码,但我似乎无法正确安排文件内容的输出。

这是文件内容:

venti lador 13 男标签

pito dingal 26 雄性 pateros

dony martinez 24 男 hagonoy

package testprojects;

import java.io.BufferedReader;
import java.io.FileReader;

public class ReadTextFile {
    public static void main(String args[]) throws Exception {
        BufferedReader bf = new BufferedReader(new FileReader("C://Users/PAO/Desktop/sampletxt.txt"));
        String line;

        while ((line = bf.readLine()) != null) {
            String[] value = line.split(" ");

            for (int x = 0; x < value.length; x++) {
                if (x >= 5) {
                    System.out.println();
                }
                System.out.print(value[x] + " ");
            }
        }
    }
}

输出:

venti lador 13 男 taguig Pito dingal 26 男 pateros dony martinez 24男哈格诺伊

期望的输出:

venti lador 13 男标签

pito dingal 26 雄性 pateros

dony martinez 24 男 hagonoy

【问题讨论】:

  • 请确保您的问题格式正确,以便我们了解您当前的输出是什么以及您想要的输出是什么。换行符在翻译中会丢失,几乎无法理解。
  • 执行拆分后有多少元素的值?您希望所有元素都在同一行还是分成多行?你想要每行多少个项目?
  • 更清楚您的输入和您希望输出的内容。现在您有了“工作”代码,进入您的 sampletxt.txt 并将文件中的行拆分为更多行,您是否仍会获得您想要的预期结果?让您的代码正常工作固然很好,但最好了解(用于学习)您可能拥有的其他数据场景,并且您的代码可以处理所有场景。

标签: java readable


【解决方案1】:

改变你的条件

if((x + 1) % 5 == 0 || (x == value.length - 1))

这样它就会在每 5 个数据处跳过一行,或者如果您到达行的最后一个数据。

你会有这样的东西:

System.out.print(value[x] + " " );
if((x + 1) % 5 == 0 || (x == value.length - 1))
    System.out.println();

【讨论】:

  • 那么如果从文件中读取的第一行有3个值,而从文件中读取的下一行有5个值,会发生什么?
  • 我仍然认为这不会得到 OP 想要的,这听起来像每行将具有相同数量的值,最后一行可能有 lass 值。跨度>
  • @Shar1er80 新条件不只考虑最后一行。如果一行有 3 个数据,并且 x == 2 则将添加一个换行符。
  • 先生,当我尝试这个时输出仍然没有改变
  • 哦,是的,现在输出是正确的。我很惊讶有这么多编写代码的方法。
【解决方案2】:

你不需要 if 语句来换行,只需将你的 println() 放在你的 for 循环之后。

public static void main(String[] args) throws Exception {    
    BufferedReader bf = new BufferedReader(new FileReader("C://Users/PAO/Desktop/sampletxt.txt"));

    String line;

    while((line=bf.readLine())!=null){
        String[] value=line.split(" ");

        for (String value1 : value) {
            System.out.print(value1 + " ");
        }
        System.out.println(""); // Goes to the next line after printing all values
    }
}

如果您希望每行有一定数量的值(例如 5 个),请尝试以下操作:

public static void main(String[] args) throws Exception {    
    BufferedReader bf = new BufferedReader(new FileReader("C://Users/PAO/Desktop/sampletxt.txt"));

    String line;

    int count = 0;
    while((line=bf.readLine())!=null){
        String[] value=line.split(" ");

        for (String value1 : value) {
            System.out.print(value1 + " ");
            count++;

            if (count == 5) { // Five values per line before a line break
                System.out.println("");
                count = 0;
            }
        }
    }
}

如果您只是打印文件中的内容,我不明白您为什么必须执行拆分。您在一个空格上拆分,然后将值打印回来,每个值之间有一个空格。只需打印从文件中读取的行。

public static void main(String[] args) throws Exception {    
    BufferedReader bf = new BufferedReader(new FileReader("C://Users/PAO/Desktop/sampletxt.txt"));

    String line;
    while((line=bf.readLine())!=null){
        System.out.println(line);
    }
}

【讨论】:

  • 看来他也想这么做。我的意思是,每 x 个项目打印一个换行符。
  • @matinikestugante 我的编辑应该会满足您的需求。
  • 如果你想要每行 5 个值,使用你的 for 循环计数器有点困难。假设您从文件中读取的第一行包含 3 个值。到目前为止,您已经在一行上打印了 3 个值。然后您从文件中读取的下一行有 5 个值,您最终会将这 5 个值写入与前 3 个值相同的行。那是你想要的吗?如果没有,您应该使用单独的计数器跟踪一行上写入的值的数量。
  • 是的,我接受您建议的编辑。顺便说一句,您编写代码的方式很糟糕!
  • 谢谢...我想:-)
猜你喜欢
  • 2020-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多