java从文件中读取数据并作出一些处理,分别统计男生女生总数,并将男生女生名字提取出来打印到控制台

java从文件中读取数据并作出一些处理

java从文件中读取数据并作出一些处理,分别统计男生女生总数,并将男生女生名字提取出来打印到控制台

img

img


package com.example.test;

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

class test {
    public static void main(String[] args) throws IOException {
        File file=new File("./stu.txt");
        BufferedReader bufferedReader=new BufferedReader(new FileReader(file));
        String line = bufferedReader.readLine();
        List<String> boy=new ArrayList<>();
        List<String> gir=new ArrayList<>();
        while (line!=null)
        {
            String[] stuInfo = line.split(" ");
            if (stuInfo[2].equals("男")){
                boy.add(line);
            }else{
                gir.add(line);
            }
            line=bufferedReader.readLine();
        }
        bufferedReader.close();
        System.out.println("男生名单------------(共"+boy.size()+"人)");
        boy.forEach(b->{
            System.out.println(b);
        });
        System.out.println("女生名单------------(共"+gir.size()+"人)");
        gir.forEach(g->{
            System.out.println(g);
        });

    }

}

txt内容:

张三 18 男
李四 19 女
王五 17 

运行结果:

img

希望能帮到你,望采纳谢谢


public class Test {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner sc = new Scanner(new File("xxxx.txt"));
        while (sc.hasNext()) {
            // 1.按行读取文件并对文本行进行解析,最终要求统计出男生和女生人数,并将所有男生和所有女生姓名存放在两个数组中。根据需要,在循环外定义相关变量。
            String temp = sc.nextLine();

            System.out.println(temp);
            int sum = 0;
            List<String> boy = new ArrayList<>();
            List<String> girl = new ArrayList<>();
            while (temp != null) {
                sum++;
                String[] stuInfo = temp.split("\t");
                if (stuInfo[2].equals("男")) {
                    boy.add(temp);
                } else {
                    girl.add(temp);
                }
            }
            // 2.分别在屏幕打印男生总人数、所有男生姓名,以及女生总人数、所有女生姓名。
            System.out.println("男生名单------------");
            boy.forEach(b -> {
                System.out.println(b);
            });
            System.out.println("女生名单------------");
            girl.forEach(g -> {
                System.out.println(g);
            });
            System.out.println("男女生一共" + sum + "人");

        }

    }


}
}

答案如下,望采纳

public class StudentInfo {

    public static void main(String[] args) {
        Scanner scanner = null;
        try {
            scanner = new Scanner(new File("stu.txt"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return;
        }
        // 1
        String[] manNames = new String[56];
        String[] womanNames = new String[56];
        int manIndex = 0;
        int womanIndex = 0;

        for (int i = 0; i < 56; i++) {
            String line = scanner.nextLine();
            String[] split = line.split("\t");
            String no = split[0];
            String name = split[1];
            String sex = split[2];
            if ("男".equals(sex)) {
                manNames[manIndex] = name;
                manIndex++;
            } else {
                womanNames[womanIndex] = name;
                womanIndex++;
            }
        }
        // 2
        System.out.println("男生总人数:" + manIndex);
        System.out.println("男生姓名如下:");
        for (int i = 0; i < manIndex; i++) {
            System.out.println(manNames[i]);
        }


        System.out.println("女生总人数:" + womanIndex);
        System.out.println("女生姓名如下:");
        for (int i = 0; i < womanIndex; i++) {
            System.out.println(womanNames[i]);
        }

        //3
        Random random = new Random();
        int manRan = random.nextInt(manIndex);
        System.out.println("随机男生姓名:" + manNames[manRan]);
        int womanRan = random.nextInt(womanIndex);
        System.out.println("随机女生姓名:" + womanNames[womanRan]);

        //4
        String[] manRandoms = getThreeRandomIndex(manNames, manIndex);
        System.out.println("随机三个男生姓名:");
        for (int i = 0; i < 3; i++) {
            System.out.println(manRandoms[i]);
        }

        String[] womanRandoms = getThreeRandomIndex(womanNames, womanIndex);
        System.out.println("随机三个女生姓名:");
        for (int i = 0; i < 3; i++) {
            System.out.println(womanRandoms[i]);
        }
    }

    /**
     *  随机取3个不重复的数
     *  在初始化的无重复待选数组中随机产生一个数放入结果中,
     *  将待选数组被随机到的数,用待选数组(len-1)下标对应的数替换
     *  然后从len-2里随机产生下一个随机数,如此类推
     * @param nameArr
     * @param len
     * @return
     */
    private static String[] getThreeRandomIndex(String[] nameArr, int len) {
        String[] names = new String[3];
        Random random = new Random();
        for (int i = 0; i < 3; i++) {
            int randomIndex = random.nextInt(len);
            names[i] = nameArr[randomIndex];
            nameArr[randomIndex] = nameArr[len - 1];
            len--;
        }

        return names;
    }
}


运行结果模拟:

男生总人数:28
男生姓名如下:
张024681012141618202224262830323436384042444648505254
女生总人数:28
女生姓名如下:
张135791113151719212325272931333537394143454749515355
随机男生姓名:张16
随机女生姓名:张13
随机三个男生姓名:
张284434
随机三个女生姓名:
张295319

Process finished with exit code 0


import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Random;

public
class StudentInfo
{
public
    static void main(String[] args)
    {
        Scanner sc = null;
        try
        {
            sc = new Scanner(new File("stu.txt"));
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }

        // 1. 按行读取文件并对文本行进行解析,最终要求统计出男生和女生人数,并将所有男生和所有女生姓名存放在两个数组中。
        // 根据需要,在循环外定义相关变量。
        int maleCount = 0;
        int femaleCount = 0;
        ArrayList<String> maleNames = new ArrayList<>();
        ArrayList<String> femaleNames = new ArrayList<>();
        while (sc.hasNextLine())
        {
            String line = sc.nextLine();
            String[] fields = line.split("\t");
            String id = fields[0];
            String name = fields[1];
            String gender = fields[2];
            if (gender.equals("男"))
            {
                maleCount++;
                maleNames.add(name);
            }
            else
            {

                femaleCount++;
                femaleNames.add(name);
            }
        }
        sc.close();

        // 2. 分别在屏幕打印男生总人数、所有男生姓名,以及女生总人数、所有女生姓名。
        System.out.println("男生总人数:" + maleCount);
        System.out.println("所有男生姓名:" + maleNames);
        System.out.println("女生总人数:" + femaleCount);
        System.out.println("所有女生姓名:" + femaleNames);

        // 3. 分别从男生和女生中随机挑选一名同学,并打印输出其姓名。
        Random random = new Random();
        String randomMaleName = maleNames.get(random.nextInt(maleNames.size()));
        String randomFemaleName = femaleNames.get(random.nextInt(femaleNames.size()));
        System.out.println("随机选取的男生姓名:" + randomMaleName);
        System.out.println("随机选取的女生姓名:" + randomFemaleName);

        // 4. 如何从男生和女生中随机挑选多名同学(例如3名,要求不重复)
        int num = 3;
        ArrayList<String> randomNames = new ArrayList<>();
        while (randomNames.size() < num)
        {
            String randomName = maleNames.get(random.nextInt(maleNames.size()));
            if (!randomNames.contains(randomName))
            {
                randomNames.add(randomName);
            }
        }
        System.out.println("随机选取的" + num + "名男生姓名:" + randomNames);
    }
}

List<String> menList= new ArrayList<>();
        List<String> womenList= new ArrayList<>();
        //每行人员姓名;;性别
        while(sc.hasNext()){
            String s = sc.nextLine();
            String[] split = s.split(";;");
            if(split.length<2)
                continue;
            if("男".equals(split[1])){
                menList.add(split[0]);
            }else if("女".equals(split[1])){
                womenList.add(split[0]);
            }
        }
        System.out.println("男生姓名:"+menList.toString()+",总人数:"+menList.size());
        System.out.println("女生姓名:"+womenList.toString()+",总人数:"+womenList.size());
        Random random= new Random();
        System.out.println("随机获取男生姓名:"+menList.get(random.nextInt(menList.size())));
        System.out.println("随机获取女生姓名:"+womenList.get(random.nextInt(womenList.size())));

        HashSet<Integer> intSet = new HashSet<>();
        HashSet<Integer> w_intSet = new HashSet<>();
        StringBuilder sb=new StringBuilder();
        StringBuilder w_sb=new StringBuilder();
        int i=0,j=0;
        int m = random.nextInt(menList.size());
        int w = random.nextInt(womenList.size());
        while(i<3 || j<3){
            if(!intSet.contains(m)){
                intSet.add(m);
                sb.append(menList.get(m)).append(",");
                i++;
            }
            if(menList.size()<3 && i==menList.size()){
                i=3;
            }
            m=random.nextInt(menList.size());
            if(!w_intSet.contains(w)){
                w_intSet.add(w);
                w_sb.append(womenList.get(w)).append(",");
                j++;
            }
            if(womenList.size()<3 && j==womenList.size()){
                j=3;
            }
            w=random.nextInt(womenList.size());
        }
        System.out.println("随机3个不同的男女生:男生"+sb.substring(0,sb.lastIndexOf(","))+";女生:"+w_sb.substring(0,w_sb.lastIndexOf(",")));
#参考代码
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
class Dome{
public static void main(String[] args) throws IOException {
int quantity[]=new int[2];//1表示男人的个数,0表示女生个数
String card[]=new String[0];//记录身份证号码
String filePath = "D:/aa.txt";//假设你D盘下有一个aa.txt文件中存放着身份证号码
FileInputStream fin;
try {
fin = new FileInputStream(filePath);//从filePath中获得输入字节
BufferedReader buffReader = new BufferedReader(new InputStreamReader(fin));
String str = "";//用于暂存读取的内容
str = buffReader.readLine();//按行读取内容给str,只读取一行
card=new String[str.length()/17];//因为不知道身份证号码的数量,所以创建可能有的数量
int p=0;//记录card的数量
for(int i=0;i<str.length();i++){
if(str.indexOf(",",i)!=-1){//判断是否是最后一个逗号
card[p]=str.substring(i,str.indexOf(",",i));//截取对应的身份证号码,这里用的是英文逗号
System.out.println(card[p]);
i=str.indexOf(",", i);//跳到以及处理过的结果末尾
}else{
card[p]=str.substring(i,str.length());
System.out.println(card[p]);
break;//结尾结束循环
}
p++;
}
buffReader.close();//关闭文件流
for(int i=0;i<card.length;i++){
if(card[i].length()==18){//判断是否出错
quantity[((int)card[i].charAt(16)-48)%2]++;//计算第17位是奇数或偶数并对应相加
}
}
System.out.println("男生数量:"+quantity[0]);//输出男生结果
System.out.println("女生数量:"+quantity[1]);//输出女生结果
} catch (FileNotFoundException e) {
System.out.println(e);//输出错误原因
}
}
}

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class StudentInfo {
    public static void main(String[] args) {
        // 定义Scanner
        Scanner sc = null;
        // 定义男生总人数
        int maleCount = 0;
        // 定义女生总人数
        int femaleCount = 0;
        // 定义男生姓名列表
        List<String> maleNames = new ArrayList<>();
        // 定义女生姓名列表
        List<String> femaleNames = new ArrayList<>();

        // 使用try-catch语句读取文件
        try {
            sc = new Scanner(new File("stu.txt"));
            // 使用while循环遍历每一行
            while (sc.hasNextLine()) {
                // 读取一行
                String line = sc.nextLine();
                // 按照Tab键分割行文本
                String[] fields = line.split("\t");
                // 获取性别字段
                String gender = fields[2];
                // 获取名字字段
                String name = fields[1];

                if (gender.equals("男")) {
                    maleCount++;
                    maleNames.add(name);
                } else if (gender.equals("女")) {
                    femaleCount++;
                    femaleNames.add(name);
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            // 关闭Scanner
            if (sc != null) {
                sc.close();
            }
        }

        // 打印男生总人数和所有男生姓名
        System.out.println("男生总人数: " + maleCount);
        System.out.println("所有男生姓名: " + maleNames);
        // 打印女生总人数和所有女生姓名
        System.out.println("女生总人数: " + femaleCount);
        System.out.println("所有女生姓名: " + femaleNames);

       // 从男生和女生中随机挑选一名同学
      Random random = new Random();
      int maleIndex = random.nextInt(maleNames.size());
      int femaleIndex = random.nextInt(femaleNames.size());
      System.out.println("随机挑选的男生姓名: " + maleNames.get(maleIndex));
      System.out.println("随机挑选的女生姓名: " + femaleNames.get(femaleIndex));
          // 从男生和女生中随机挑选3名同学,要求不重复
    int count = 3;
    List<String> names = new ArrayList<>();
    while (names.size() < count) {
        // 从男生列表中挑选一名同学
        int index = random.nextInt(maleNames.size());
        String name = maleNames.get(index);
        // 如果该名同学还没有被挑选过,则加入结果列表
        if (!names.contains(name)) {
            names.add(name);
        }
        // 同理,从女生列表中挑选一名同学
        index = random.nextInt(femaleNames.size());
        name = femaleNames.get(index);
        if (!names.contains(name)) {
            names.add(name);
        }
    }
    System.out.println("随机挑选的3名同学姓名: " + names);
}
}



import java.util.ArrayList;
import java.util.List;
import java.io.*;
/**
 * @Author fenglinhua
 * @Date 2022/12/27
 * @Describe 接口描述
 **/

public class Tools {
   //文件内容
   /*张三 男 21
    李四 男 22
    王红 女 18
    青念 女 20*/
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = null;
        try {
            //读取指定位置的文件
            File file = new File("E:\\ceshi.txt");
            bufferedReader = new BufferedReader(new FileReader(file));
            String line = bufferedReader.readLine();
            List<String> boy = new ArrayList<>();
            List<String> gir = new ArrayList<>();
            while (line != null) {
                //分隔符跟文件内容有关,这里是空格分隔符
                String[] info = line.split(" ");
                if (info[1].equals("男")) {
                    boy.add(line);
                } else {
                    gir.add(line);
                }
                line = bufferedReader.readLine();
            }
            System.out.println("男生名单------------(共" + boy.size() + "人)");
            boy.forEach(b -> {
                System.out.println(b);
            });
            System.out.println("女生名单------------(共" + gir.size() + "人)");
            gir.forEach(g -> {
                System.out.println(g);
            });
        }catch (Exception e){
            e.printStackTrace();
        }finally{
           //最后一定要关闭输入流
            try {
                bufferedReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

一行一行的读取数据,并转成字符串,然后解析字符串就可以得到了