我正在处理一个用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
我确定我需要使用%符号。但我似乎无法弄清楚如何。任何帮助将不胜感激
答案 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)
将行添加到数组或列表中,您可以通过索引
获取它们