[英]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.