读取整个文件,然后输出具有特定顺序的行

时间:2016-09-17 07:11:11

标签: java string bufferedreader

我正在处理一个用n行读取字符串文件的函数。

想象一下,文件中的每一行都是从0开始编号的。我试图修改这个函数,使它读取整个文件,然后输出编号为0,3,6,...的行。

后面是编号为1,4,7,......的行,最后是编号为2,5,8,......的行。

public static void doIt(BufferedReader r, PrintWriter w) throws IOException {

    String s;

    List<String> tmp = new ArrayList<String>();

    while((s = r.readLine())!=null){
        tmp.add(s);
    }


    for (String text : s) {
        w.println(text);
    }
}

例如:

0
1
2
3
4
5
6
7
8
9

应输出

0
3
6
9
1
4
7
2
5
8

我确定我需要使用%符号。但我似乎无法弄清楚如何。任何帮助将不胜感激

5 个答案:

答案 0 :(得分:2)

如果只存储int值(使用List<Integer>并捕获Integer.parseInt(s)),则应使用NumberFormatException

然后你必须像这样对你的列表(Collections.sort())进行排序:

    Collections.sort(tmp, new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            return new Integer(o1 % 3).compareTo(new Integer(o2 % 3));
        }
    });

答案 1 :(得分:2)

您可以使用此循环在创建列表后实现所需目的:

    int gap = 3;
    for (int i = 0; i < gap; i++) {
        for (int j = i; j < tmp.size(); j+=gap) {
            System.out.println(tmp.get(j));
        }
    }

如果你想跳跃超过3,你只需更新变量间隙。

答案 2 :(得分:1)

对于这个例子,将考虑到其所有行都在一个字符串数组中,这里我提出了一个递归函数,它在循环中迭代三个

static int cont=0;
public static int ReadLines(String[]array,int init)
{
  if(cont>array.length-1)return 0;
  else
  {
    for (int i = init; i < array.length; i+=3) {
          System.out.println(array[i]);
          cont++;
      }
    return ReadLines(array, init+1);
  }
}

调用函数

String[] array = new String[]{"0","1","2","3","4","5","6","7","8","9"};
ReadLines(array,0);

答案 3 :(得分:1)

将文件解析为3个列表,然后将另一个列表写入输出:

final int num = 3;
ArrayList<String>[] lists = new ArrayList[num];
for (int i = 0; i < num; i++) {
    lists[i] = new ArrayList<>();
}

String s;
for (int i = 0; (s = r.readLine())!=null; i++) {
    lists[i % num].add(s);
}

for (int i = 0; i < num; i++) {
    for (String line : lists[i]) {
        w.println(line);
    }
}

答案 4 :(得分:0)

将行添加到数组或列表中,您可以通过索引

获取它们