IO流练习

IO-综合练习

制造假数据

在这里插入图片描述
有关正则表达式group
https://blog.csdn.net/qq_20412595/article/details/82633501

//正则表达式爬取网络资源
package testOne;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class test {
    public static void main(String[] args) throws IOException {
        /*
        *       制造假数据:
        *           网址:https://hanyu.baidu.com/s?wd=%E7%99%BE%E5%AE%B6%E5%A7%93&from=poem
        *               http://www.haoming8.cn/baobao/10881.html
        *               http://www.haoming8.cn/baobao/7641.html
        * */
        String familyNameUrl="https://hanyu.baidu.com/s?wd=%E7%99%BE%E5%AE%B6%E5%A7%93&from=poem";
        String boyNameUrl="http://www.haoming8.cn/baobao/10881.html";
        String girlNameUrl="http://www.haoming8.cn/baobao/7641.html";
        //由网址爬取到的原始数据
        String data1 = getData(familyNameUrl);
        String data2 = getData(boyNameUrl);
        String data3 = getData(girlNameUrl);
//        System.out.println(data1);
        //对原始数据进行处理,获得临时数据
        ArrayList<String> familyName = crawlerData(data1, "(.{4})(,|。)", 1);
        ArrayList<String> boyName = crawlerData(data2, "([\\u4E00-\\u9FA5]{2})(、|。)", 1);
        ArrayList<String> girlName = crawlerData(data3, "(.. ){4}(..)", 0);

        //对临时数据处理,得到可以使用的假数据
        ArrayList<String> familyName1=new ArrayList<>();
        for (String s : familyName) {
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                familyName1.add(c+"");
            }
        }
//        System.out.println(familyName1);
        HashSet<String>set=new HashSet<>();
        for (String s : boyName) {
            set.add(s);
        }
//        System.out.println(set);
        ArrayList<String> girlName1=new ArrayList<>();
        for (String s : girlName) {
            String[] s1 = s.split(" ");
            for (int i = 0; i < s1.length; i++) {
                girlName1.add(s1[i]);
            }
        }
//        System.out.println(girlName1);

        ArrayList<String> info = getInfo(familyName1, set, girlName1, 10, 30);
        BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\我的世界\\name.txt"));
        for (String s : info) {
            bw.write(s);
            bw.newLine();
        }
        bw.close();
    }
    //对假数据进行拼接
    public static ArrayList<String>
    getInfo(ArrayList<String> familyName1,HashSet<String>boyName, ArrayList<String> girlName1,int boyCount,int girlCount){
        ArrayList<String>list=new ArrayList<>();
        HashSet<String>boyXm=new HashSet<>();
        //对男生名字进行拼接
        while (true){
            if(boyXm.size()==boyCount){
                break;
            }
            Collections.shuffle(familyName1);
            List list1=new ArrayList(boyName);
            Collections.shuffle(list1);
            boyXm.add(familyName1.get(0)+list1.get(0));
        }
        System.out.println(boyXm);
        //对女生名字进行拼接
        HashSet<String>girlXm=new HashSet<>();
        while (true){
            if(girlXm.size()==girlCount){
                break;
            }
            Collections.shuffle(familyName1);
            Collections.shuffle(girlName1);
            girlXm.add(familyName1.get(0)+girlName1.get(0));
        }
        System.out.println(girlXm);
        Random r=new Random();
        for (String s : boyXm) {
            int i = r.nextInt(10)+19;
            list.add(s+"-男-"+i);
        }
        for (String s : girlXm) {
            int i = r.nextInt(10) + 10;
            list.add(s+"-男-"+i);
        }

        return list;
    }
    public static ArrayList<String> crawlerData(String rawData,String regex,int x){
        ArrayList<String> list = new ArrayList<>();
        Pattern compile = Pattern.compile(regex);
        Matcher matcher = compile.matcher(rawData);
        while (matcher.find()){
//            System.out.println(matcher.group(x));
            //这里group的参数分别表示为:
            //如果是1,就表示获取正则表达式所截取的所有元素
            //如果是2,就表示获取截取的第一块元素
            //如果是3,就表示获取第二块元素
            list.add(matcher.group(x));
        }
        return list;

    }
    //作用:从网络上爬取原始数据
    public static String getData(String net) throws IOException {
        StringBuilder sb=new StringBuilder();
        //创建URL对象
        URL url=new URL(net);
        //链接上网址
        //注意,启动程序时要保证网络畅通,网址可以链接
        URLConnection conn=url.openConnection();
        //读取数据
        InputStreamReader isr=new InputStreamReader(conn.getInputStream());
        int b;
        while ((b=isr.read())!=-1){
            sb.append((char)b);
        }
        //释放资源,注意注意。。。。
        isr.close();
        return sb.toString();
    }
}

利用Hutool包制造假数据

有关Hutool包的使用,可以直接查看官方文档,了解每种方法的具体功能

package testOne;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ReUtil;
import cn.hutool.http.HttpUtil;

import java.util.*;

public class testTwo {
    public static void main(String[] args) {
        String familyNameUrl="https://hanyu.baidu.com/s?wd=%E7%99%BE%E5%AE%B6%E5%A7%93&from=poem";
        String boyNameUrl="http://www.haoming8.cn/baobao/10881.html";
        String girlNameUrl="http://www.haoming8.cn/baobao/7641.html";

        //使用Hutool包有不会的问题直接去找官方文档,里面介绍的很详细
        String s1 = HttpUtil.get(familyNameUrl);
        String s2 = HttpUtil.get(boyNameUrl);
        String s3 = HttpUtil.get(girlNameUrl);



        //对原始数据用正则表达式进行处理,获得临时数据
//        ArrayList<String> familyName = crawlerData(data1, "(.{4})(,|。)", 1);
//        ArrayList<String> boyName = crawlerData(data2, "([\\u4E00-\\u9FA5]{2})(、|。)", 1);
//        ArrayList<String> girlName = crawlerData(data3, "(.. ){4}(..)", 0);
        List<String> list1 = ReUtil.findAll("(.{4})(,|。)", s1, 1);
        List<String> list2 = ReUtil.findAll("([\\u4E00-\\u9FA5]{2})(、|。)", s2, 1);
        List<String> list3 = ReUtil.findAll("(.. ){4}(..)", s3, 0);

        System.out.println(list1);
        System.out.println(list2);
        System.out.println(list3);

        //对临时数据处理,得到可以使用的假数据
        ArrayList<String> familyName1=new ArrayList<>();
        for (String s : list1) {
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                familyName1.add(c+"");
            }
        }
//        System.out.println(familyName1);
        HashSet<String> set=new HashSet<>();
        for (String s : list2) {
            set.add(s);
        }
//        System.out.println(set);
        ArrayList<String> girlName1=new ArrayList<>();
        for (String s : list3) {
            String[] ss = s.split(" ");
            for (int i = 0; i < ss.length; i++) {
                girlName1.add(ss[i]);
            }
        }
        ArrayList<String> info = getInfo(familyName1, set, girlName1, 10, 30);
        FileUtil.writeLines(info,"D:\\我的世界\\name1.txt","UTF-8");

    }
    public static ArrayList<String>
    getInfo(ArrayList<String> familyName1,HashSet<String>boyName, ArrayList<String> girlName1,int boyCount,int girlCount){
        ArrayList<String>list=new ArrayList<>();
        HashSet<String>boyXm=new HashSet<>();
        //对男生名字进行拼接
        while (true){
            if(boyXm.size()==boyCount){
                break;
            }
            Collections.shuffle(familyName1);
            List list1=new ArrayList(boyName);
            Collections.shuffle(list1);
            boyXm.add(familyName1.get(0)+list1.get(0));
        }
        System.out.println(boyXm);
        //对女生名字进行拼接
        HashSet<String>girlXm=new HashSet<>();
        while (true){
            if(girlXm.size()==girlCount){
                break;
            }
            Collections.shuffle(familyName1);
            Collections.shuffle(girlName1);
            girlXm.add(familyName1.get(0)+girlName1.get(0));
        }
        System.out.println(girlXm);
        Random r=new Random();
        for (String s : boyXm) {
            int i = r.nextInt(10)+19;
            list.add(s+"-男-"+i);
        }
        for (String s : girlXm) {
            int i = r.nextInt(10) + 10;
            list.add(s+"-男-"+i);
        }

        return list;
    }
}

随机点名器

在这里插入图片描述

    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new FileReader("D:\\我的世界\\name.txt"));
        String s;
        ArrayList<String>list=new ArrayList<>();
        while((s=br.readLine())!=null){
            String s1 = s.split("-")[0];
            list.add(s1);
        }
        Collections.shuffle(list);
        System.out.println(list.get(0));
    }

在这里插入图片描述

    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new FileReader("D:\\我的世界\\name.txt"));
        String s;
        ArrayList<String>boyList=new ArrayList<>();
        ArrayList<String>girlList=new ArrayList<>();
        while ((s=br.readLine())!=null){
            String[] s1 = s.split("-");
            if(s1[1].equals("男")){
                boyList.add(s1[0]);
            }else {
                girlList.add(s1[0]);
            }
        }
        ArrayList<Integer>temp=new ArrayList<>();
        Collections.addAll(temp,1,1,1,1,1,1,1,0,0,0);
        int count=0;
        int nan=0;
        int nv=0;
        while (count<(1000000-1)){
            count++;
            Collections.shuffle(temp);
            if(temp.get(0)==1){
                nan++;
            }else{
                nv++;
            }
        }
        System.out.println(nan);
        System.out.println(nv);
        //699890
        //300109
    }

在这里插入图片描述

    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new FileReader("D:\\我的世界\\name.txt"));
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:\\我的世界\\one.txt"));
        char c = (char) bis.read();
        int i = Integer.parseInt(String.valueOf(c));
        if(i==3){
            System.out.println("张三");
            System.exit(0);
        }
        BufferedWriter bos=new BufferedWriter(new FileWriter("D:\\我的世界\\one.txt"));
        bos.write(++i+"");
        String s;
        ArrayList<String> list=new ArrayList<>();
        while((s=br.readLine())!=null){
            String s1 = s.split("-")[0];
            list.add(s1);
        }
        Collections.shuffle(list);
        System.out.println(list.get(0));
        bos.close();
        bis.close();
        br.close();
    }

在这里插入图片描述

    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new FileReader("D:\\我的世界\\name.txt"));
        String s;
        ArrayList<String> list=new ArrayList<>();
        while((s=br.readLine())!=null){
            String s1 = s.split("-")[0];
            list.add(s1);
        }
        ArrayList<String>copyList=new ArrayList<>();
        int count=10;
        Random r=new Random();
        for (int i = 1; i <= count; i++) {
            System.out.println("这是第"+i+"轮点名");
            int size = list.size();
            for (int i1 = 0; i1 < size; i1++) {
                int i2 = r.nextInt(list.size());
                String remove = list.remove(i2);
                System.out.println(remove);
                copyList.add(remove);
            }
            list.addAll(copyList);
            copyList.clear();
            System.out.println("----------------------------");
        }
        br.close();
    }

带权重的随机

在这里插入图片描述

    public static void main(String[] args) throws IOException {
        //把所有学生信息放到内存中
        ArrayList<student>list=new ArrayList<>();
        BufferedReader br=new BufferedReader(new FileReader("D:\\我的世界\\name.txt"));
        String line;
        while ((line=br.readLine())!=null){
            String[] split = line.split("-");
            student stu=new student(split[0],split[1],Integer.parseInt(split[2]),Double.parseDouble(split[3]));
            list.add(stu);
        }
        br.close();
        //计算权重的总和
        double weight=0;
        for (student stu : list) {
            weight=weight+stu.getWeight();
        }
//        System.out.println(weight);
        //计算每一个人的实际权重
        double[]arr=new double[list.size()];
        int index=0;
        for (student stu : list) {
            arr[index]=stu.getWeight()/weight;
            index++;
        }
//        System.out.println(Arrays.toString(arr));
        //计算每一个人的权重占比范围
        for (int i = 1; i < arr.length; i++) {
            arr[i]=arr[i]+arr[i-1];
        }
        //随机抽取

        //先获取一个0.0到1.0之间的随机数
        double random = Math.random();
        //使用二分查找法
        //Arrays的binarySearch就是使用二分查找法
        //方法返回值为: -插入点-1
        //所以插入点=-返回值-1
        //这个插入点就是被选中的学生
        int i = -Arrays.binarySearch(arr, random) - 1;
        student stu = list.get(i);
        System.out.println(list.get(i));
        double w=stu.getWeight()/2;
        stu.setWeight(w);

        //把集合中的数据再次写入文件中
        BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\我的世界\\name.txt"));
        for (student student : list) {
            bw.write(student.toString());
            bw.newLine();
        }
        bw.close();
    }

登录

在这里插入图片描述

   public static void main(String[] args) throws IOException {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入账号:");
        String next1 = sc.next();
        System.out.println("请输入密码:");
        int next2 = sc.nextInt();
        BufferedReader br=new BufferedReader(new FileReader("D:\\我的世界\\userinfo.txt"));
        String[] arr = br.readLine().split("&");
        String username1 = arr[0];
        String username = username1.split("=")[1];
        String password2 = arr[1];
        String password1 = password2.split("=")[1];
        int password = Integer.parseInt(password1);
        if(next1.equals(username)&&next2==password){
            System.out.println("登录成功");
        }else {
            System.out.println("登录失败");
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值