java从文件中读取数据并作出一些处理
java从文件中读取数据并作出一些处理,分别统计男生女生总数,并将男生女生名字提取出来打印到控制台
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 男
运行结果:
希望能帮到你,望采纳谢谢
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
男生姓名如下:
张0
张2
张4
张6
张8
张10
张12
张14
张16
张18
张20
张22
张24
张26
张28
张30
张32
张34
张36
张38
张40
张42
张44
张46
张48
张50
张52
张54
女生总人数:28
女生姓名如下:
张1
张3
张5
张7
张9
张11
张13
张15
张17
张19
张21
张23
张25
张27
张29
张31
张33
张35
张37
张39
张41
张43
张45
张47
张49
张51
张53
张55
随机男生姓名:张16
随机女生姓名:张13
随机三个男生姓名:
张28
张44
张34
随机三个女生姓名:
张29
张53
张19
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();
}
}
}
}
一行一行的读取数据,并转成字符串,然后解析字符串就可以得到了