从文本文件中获取每个第n行,将其反转并打印出

时间:2018-02-10 19:05:10

标签: java

我编写的函数有:file-path和number作为参数。 函数打开此文件并从中获取每个第n行,将其反转并打印到控制台。

到目前为止,我设法做了类似的事情:

public static void reverseText(String filePath, int colle) // int colle = n-th line
{
    BufferedReader fileRead = null;

    String line;        

    try
    {
        File file = new File(filePath);
        if (!(file.exists()))
            file.createNewFile();

        fileRead = new BufferedReader(new FileReader(file));

        while ((line = fileRead.readLine()) != null)
        { 

        }


        fileRead.close();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
}

我的意思是在文件中例如是跟随文本行(int colle = 2,所以我们得到每个第二行表单文件)

first line second line< - 这个 third line fourth line< - 和此

(读取文件并反向获取行) - >输出打印在控制台中:

" enil dnoces" " enil htruof"

我想反过来我应该使用StringBuilder,但首先我需要获取这些行,我不知道如何读取每一行...

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

下面的解决方案读取所有行,然后选择每个n行,反向和打印。

public static void main(String[] args) throws IOException {
    int frequency = 5;
    final List<String> strings = Files.readAllLines(Paths.get("/home/test.txt"));
    List<String> collect = IntStream.range(0, strings.size())
            .filter(c -> c % frequency == 0)
            .mapToObj(c -> strings.get(c))
            .collect(Collectors.toList());

    collect.forEach(str ->
            System.out.println(new StringBuilder(str).reverse())
    );
}

IntStream是从集合字符串中获取特定行所必需的。 然后将一条一条线反转并打印。它可以是一个班轮,但决定让它更具可读性。

答案 1 :(得分:0)

使用行计数器来控制循环迭代:

int n = 3;
StringBuilder sb = new StringBuilder();
for (int i = 0; (line = fileRead.readLine()) != null; i++) {
     if (i % n == 0) {
        sb.delete(0, line.length())
        System.out.println(sb.append(line).reverse());
     }
}

您仍然可以使用while为此定义变量。

答案 2 :(得分:0)

感谢大家的帮助。下面我发布了我期望的工作代码

public static void reverseText(String filePath, int colle)
{   
    BufferedReader fileRead = null;
    StringBuilder builder = new StringBuilder();
    int lineCounter = 0;
    String line;      

    try
    {
        File file = new File(filePath);
        if (!(file.exists()))
                file.createNewFile();

        fileRead = new BufferedReader(new FileReader(file));

        while ((line = fileRead.readLine()) != null)
        { 
            lineCounter++;
            if (lineCounter %colle == 0)
            {
                builder.delete(0, line.length());
                System.out.println(builder.append(line).reverse());
            } 
        }

        fileRead.close();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
 }