【经典小练习】修改文件中的数据

🌹例子

文本文件中有下面的数据
2-1-9-4-7-8
将文件中的数据进行排序,变成下面的数据
1-2-4-7-8-9

🌺思路

要对这些数据进行排序,可以采用以下思路:

读取文本文件中的数据:首先需要读取文本文件中的数据,并将其转换为程序中的数据结构,如数组或列表,以便进行排序操作。

分割数据:将读取到的字符串按照分隔符(这里是“-”)进行分割,得到各个数字的字符串表示。

转换为数字并排序:将分割得到的字符串转换为整数,并进行排序操作,可以使用常见的排序算法,如快速排序、归并排序等。在Java中,可以使用Arrays.sort()方法对数组进行排序,或使用Collections.sort()方法对列表进行排序。

将排序后的数字连接为字符串:将排序后的数字重新连接为字符串,并在数字之间添加分隔符“-”,得到最终的排序结果。

将排序结果写入文件:将排序后的结果写入文件,完成整个排序过程。

🛸方法一

package org.Demo6;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;

public class Demo1 {
    public static void main(String[] args) throws IOException {
        //读取数据
        FileReader fr = new FileReader("E:\\a.txt");
        StringBuilder sb=new StringBuilder();
        int ch;
        while ((ch=fr.read())!=-1){
            sb.append((char)ch);
        }
        fr.close();

        //排序
        String str=sb.toString();
        String[] arrstr = str.split("-");

        ArrayList<Integer> list = new ArrayList<>();
        for (String s: arrstr){
            // 去除空白字符
            s = s.trim();
            if (!s.isEmpty()) {
                int i = Integer.parseInt(s);
                list.add(i);
            }
//            int i=Integer.parseInt(s);
//            list.add(i);
        }

        Collections.sort(list);

        //写出数据
        FileWriter fw = new FileWriter("E:\\b.txt");
        for (int i=0;i<list.size();i++){
            if (i==list.size()-1){
                //最后一个元素
                fw.write(list.get(i)+"");
            }else {
                //非最后一个元素
                fw.write(list.get(i)+"-");
            }
        }
        fw.close();
    }
}

✨报错解决

在这里插入图片描述
根据报错信息中提供的输入字符串"8\n",可以看到字符串中包含了换行符"\n"。这可能是导致转换失败的原因。Integer.parseInt()方法只能将符合整数格式的字符串转换为整数,当字符串中包含非数字字符时,会抛出NumberFormatException异常。
在这里插入图片描述
为了解决这个问题,你可以在转换之前先去除字符串中的空白字符,包括换行符。可以使用String.trim()方法去除字符串两端的空白字符

在这里插入图片描述

🛸方法二

package org.Demo6;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.SQLOutput;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class Demo1 {
    public static void main(String[] args) throws IOException {
        //读取数据
        FileReader fr = new FileReader("E:\\a.txt");
        StringBuilder sb = new StringBuilder();
        int ch;
        while ((ch = fr.read()) != -1) {
            sb.append((char) ch);
        }
        fr.close();
        System.out.println(sb);

        //排序
        Integer[] arr = Arrays.stream(sb.toString().split("-"))
                .map(s -> s.trim()) //去掉首尾空格
                .map(Integer::parseInt)
                .sorted()
                .toArray(Integer[]::new);

        //写出
        FileWriter fw = new FileWriter("E:\\b.txt");
        String s=Arrays.toString(arr).replace(", ","-");//tostring操作解释后,是[1,2,4,7,8,9],带有", "的,我们要把", "(逗号空格)替换为”-“
        //上一段代码运行结束后是结果是带有[]的,我们只需要把头尾的[]去掉即可
        String result=s.substring(1,s.length()-1);
        fw.write(result);
        System.out.println(result);
    }

}

在这里插入图片描述
在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!

在这里插入图片描述

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下小吉.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值