d盘有个文件c.txt内容如下:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
要求:将c.txt中的数字进行如下运算,第n行m列是第(n-1)行第m列的数字之和(提示:第一行不变,第二行变为:6 8 10 12,第三行变为:15 18 21 24,第四行变为28 32 36 40),然后将计算结保存在d.txt中。
有好的建议和意见欢迎提出交流,最好可以帮我改进一下代码- package heima;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.util.ArrayList;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class Test1 {
- static Pattern p = null;
- static Matcher mathcer = null;
- static String regex = "\\b[0-9]++\\b";
- static ArrayList<ArrayList> arr = new ArrayList<ArrayList>();// 每行的号码都用一个集合存起来,这个集合用来存下面的集合存号码的集合
- public static void main(String[] args) throws IOException {
- show("D:\\d.txt");
- }
- public static void show(String FileDir) throws IOException {
- File f = new File(FileDir);
- BufferedReader r = new BufferedReader(new FileReader(f));
- String str = null;
- int line = 1;// 行计数器,用来记录读到了第几行
- int com = 0;// 用于重复记数,0只是用来初始化而已
- while ((str = r.readLine()) != null) {
- p = Pattern.compile(regex);// 这两行是正则匹配
- mathcer = p.matcher(str);
- ArrayList arr1 = new ArrayList<Integer>(); // 用于存储每行的号码,由于在循环内,所以每次执行到这里都会创建一个新的集合,
- if (line == 1) {// 这个是获取第一行的数据,第二行开始就不需要执行这个if内的语句了,因为第二行开始只受第一行的最后一个号码影响结果而已
- while (mathcer.find()) {
- Integer x = Integer.parseInt(mathcer.group());
- arr1.add(x);
- com = x;// 号码增加集合之后,我要记录下来这个号码,用来运算的,下一行开始到最后执行的都是else语句了
- }
- } else {
- while (mathcer.find()) {// 从第二行开始都会执行到这里,直到最后
- // ;mathcer.find()是匹配器的方法
- com = com + line;// 第二行之后,其实读到的数字是什么并不重要,后一个数是前一个数加上行数line即可
- arr1.add(com);
- }
- }
- arr.add(arr1);// 将装行号码的集合增加到在成员变量定义的那个集合去
- line++;// 是行计数器累加
- }
- PrintWriter out = new PrintWriter(new FileWriter(new File("d:\\c.txt")),true);
- for (ArrayList ar : arr) {
- for (int i = 0; i < ar.size(); i++) {
- out.write(ar.get(i).toString()+" ");
- out.flush();
- }
- out.println("");
- }
-
- for (ArrayList ar : arr) { for (int i = 0; i < ar.size(); i++) {
- System.out.print((int) ar.get(i) + " ");
-
- } System.out.println(" "); }
-
- }
- }
复制代码 |
|