如何从文件中读取偶数行并反向打印,同时保持奇数行?

时间:2013-10-31 11:05:52

标签: java string file-io io

我想从文件中读取偶数行并反向打印,同时保持奇数行 这是我试过的代码,它以反向打印所有行

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;


public class RevWords
{
public static void main(String[] args) throws IOException
{   
    BufferedReader br = new BufferedReader(new InputStreamReader(new    
    FileInputStream("home.txt"), "UTF-8"));                

    String lines = br.readLine();
    ArrayList<String> buffer = new ArrayList<String>();
    while (lines!=null )

    {   

     if (lines!=null)

                     {   
            buffer.add("\n");

            StringBuilder str = new StringBuilder();
            String[] splitStr = lines.split(" ");
            for (int i = splitStr.length; i > 0; i--) {
                str.append(splitStr[i - 1]).append(" ");
            }

            buffer.add(str.toString()); 
        }


        lines=br.readLine();
    }


    for(int i = buffer.size()-1; i>=0; i--)
    {

        System.out.print(buffer.get(i));
    }

    br.close();
   }
}

我的home.txt是

One reason people lie is to achieve personal power. 
Achieving personal power is helpful for someone who pretends to be more confident than 
he really is.
For example, one of my friends threw a party at his house last month. 
He asked me to come to his party and bring a date. However,
I didn’t have a girlfriend. One of my other friends, 
who had a date to go to the party with, asked me about my date.
I didn’t want to be embarrassed,
so I claimed that I had a lot of work to do. 
I said I could easily find a date even better than his if I wanted 
I also told him that his date was ugly. I achieved power to help me feel confident; 
however, I embarrassed my friend and his date. 
Although this lie helped me at the time,
since then it has made me look down on myself.

我的输出是

myself. on down look me made has it then since
time, the at me helped lie this Although
date. his and friend my embarrassed I however,
confident; feel me help to power achieved I ugly. was date his that him told als
o I
wanted I if his than better even date a find easily could I said I
do. to work of lot a had I that claimed I so
embarrassed, be to want didn?t I
date. my about me asked with, party the to go to date a had who
friends, other my of One girlfriend. a have didn?t I
However, date. a bring and party his to come to me asked He
month. last house his at party a threw friends my of one example, For
is. really he than confident more be to pretends who someone for helpful is powe
r personal Achieving
power. personal achieve to is lie people reason One

现在如何保持奇数行并反向打印行

2 个答案:

答案 0 :(得分:0)

您可以尝试添加计数器以了解哪个行号是偶数:

int counter = 1;    
while (lines!=null )

{   

 if (lines!=null)

                 {   
        buffer.add("\n");

        StringBuilder str = new StringBuilder();
        if(counter%2==0){
            String[] splitStr = lines.split(" ");
            for (int i = splitStr.length; i > 0; i--) {
                str.append(splitStr[i - 1]).append(" ");
            }
            buffer.add(str.toString());
        }else{

            buffer.add(lines); 
        }
    }

    lines=br.readLine();
    counter++;
}

答案 1 :(得分:0)

以下代码段将完成您的工作:

br = new BufferedReader(new InputStreamReader(new FileInputStream("/home/smd/Desktop/test.txt"), "UTF-8"));
        String lines = br.readLine();
        ArrayList<String> buffer = new ArrayList<String>();
        //Counter to keep count of line
        int counter = 0;
        while (lines != null) {
            counter++;
            buffer.add("\n");
            /*
             * Check for odd line. If line is odd, revers it, else take the line as it is.
             */
            if (counter % 2 == 0) {
                StringBuilder str = new StringBuilder();
                String[] splitStr = lines.split(" ");
                for (int i = splitStr.length; i > 0; i--) {
                    str.append(splitStr[i - 1]).append(" ");
                }
                buffer.add(str.toString());
            } else {
                buffer.add(lines);
            }
            lines = br.readLine();
        }
        /*
         * Print from buffer. Even buffer.toString() will work, but it appends comma ',' to separate line and add braces to whole string.
         */
        for (int i = 0; i < buffer.size() - 1; i++) {
            System.out.print(buffer.get(i));
        }
        br.close();

对您的代码进行的修改:   - 使用计数器检查Line是否为奇数。如果line是奇数反转它,否则使用原始行。   - 直接从缓冲区打印,而不是以相反的顺序打印。