繁体   English   中英

读取整个文件,然后以一定顺序输出行

[英]Reading the whole file and then outputting the lines with a certain order

我正在研究一个读取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

我确定我需要使用%符号。 但我似乎不知道如何。 任何帮助将不胜感激

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

然后,您必须像这样对List进行排序(使用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));
        }
    });

创建列表后,可以使用此循环来实现所需的功能:

    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,则只需更新变量间隙。

对于本示例,将考虑其所有行均位于字符串数组中的情况,在这里,我介绍了一个在循环中迭代三的递归函数

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个列表,然后将一个列表依次写到输出中:

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);
    }
}

将行添加到数组或列表中,即可通过索引获取它们

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM