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("登录失败");
}
}