Download IO_stream_project/Case_module/src/case_package1/Test.java from zxy0307/Java: direct link, hf CLI and curl.
- Browser
- Download file 7.18 kB
-
https://huggingface.co/zxy0307/Java/resolve/main/IO_stream_project/Case_module/src/case_package1/Test.java
- Command line
-
hf download hf://zxy0307/Java/IO_stream_project/Case_module/src/case_package1/Test.java
-
curl -L -o Test.java https://huggingface.co/zxy0307/Java/resolve/main/IO_stream_project/Case_module/src/case_package1/Test.java
7.18 kB
| package case_package1; | |
| import java.io.BufferedWriter; | |
| import java.io.FileWriter; | |
| import java.io.IOException; | |
| import java.io.InputStreamReader; | |
| import java.net.URL; | |
| import java.net.URLConnection; | |
| import java.util.ArrayList; | |
| import java.util.Collections; | |
| import java.util.HashSet; | |
| import java.util.Random; | |
| 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&device=pc&from=home | |
| 获取男生名字:http://www.haoming8.cn/baobao/12560.html | |
| 获取女生名字:http://www.haoming8.cn/baobao/4155.html | |
| */ | |
| //1、定义变量记录网址 | |
| String familyNameNet = "https://hanyu.baidu.com/s?wd=%E7%99%BE%E5%AE%B6%E5%A7%93&device=pc&from=home"; | |
| String boyNameNet = "http://www.haoming8.cn/baobao/12560.html"; | |
| String girlNameNet = "http://www.haoming8.cn/baobao/4155.html"; | |
| //2、爬取数据,把网址上所有的数据拼接成一个字符串 | |
| String familyNameStr = webCrawler(familyNameNet); | |
| String boyNameStr = webCrawler(boyNameNet); | |
| String girlNameStr = webCrawler(girlNameNet); | |
| //3、利用正则表达式,把其中符合要求的数据获取出来 | |
| ArrayList<String> familyNameTempList = getData(familyNameStr, "(.{4})(,|。)", 1); | |
| ArrayList<String> boyNameTempList = getData(boyNameStr, "([\\u4e00-\\u9fa5]{2})(、|。)", 1); | |
| ArrayList<String> girlNameTempList = getData(girlNameStr, "(.. ){4}..", 0); | |
| //4、处理数据 | |
| //familyNameTempList(姓氏) | |
| //处理方案:把每一个姓氏拆开并添加到一个新的集合当中 | |
| ArrayList<String> familyNameList = new ArrayList<>(); | |
| for (String str : familyNameTempList) { | |
| for (int i = 0; i < str.length(); i++) { | |
| char c = str.charAt(i); | |
| familyNameList.add(c + ""); | |
| } | |
| } | |
| //System.out.println(familyNameList); | |
| //boyNameTempList(男生的名字) | |
| //处理方案:去除其中的重复元素 | |
| ArrayList<String> boyNameList = new ArrayList<>(); | |
| for (String str : boyNameTempList) { | |
| if (!boyNameList.contains(str)) { | |
| boyNameList.add(str); | |
| } | |
| } | |
| //System.out.println(boyNameList); | |
| //girlNameTempList(女生的姓名) | |
| //处理方案:把里面的每一个元素用空格进行切割,得到每一个女生的名字 | |
| ArrayList<String> girlNameList = new ArrayList<>(); | |
| for (String str : girlNameTempList) { | |
| String[] arr = str.split(" "); | |
| for (int i = 0; i < arr.length; i++) { | |
| girlNameList.add(arr[i]); | |
| } | |
| } | |
| //System.out.println(girlNameList); | |
| //5、生成数据 | |
| //姓名(唯一)-性别-年龄 | |
| ArrayList<String> infos = getInfos(familyNameList, boyNameList, girlNameList, 20, 25); | |
| Collections.shuffle(infos); | |
| //System.out.println(infos); | |
| //6、写出数据 | |
| BufferedWriter bw = new BufferedWriter(new FileWriter("/Users/zhaoxiaoyong/Documents" + | |
| "/Java/IO_stream_project/Case_module/src/NameInfos.txt")); | |
| for (String info : infos) { | |
| bw.write(info); | |
| bw.newLine(); | |
| } | |
| bw.close(); | |
| } | |
| /* | |
| * 作用: | |
| * 获取男生和女生的信息:张三-男-23 | |
| * 形参: | |
| * 参数一:装着姓氏的集合 | |
| * 参数二:装着男生名字的集合 | |
| * 参数三:装着女生名字的集合 | |
| * 参数四:男生个数 | |
| * 参数五:女生个数 | |
| */ | |
| public static ArrayList<String> getInfos(ArrayList<String> familyNameList, ArrayList<String> boyNameList, ArrayList<String> girlNameList, int boyCount, int girlCount) { | |
| //1、生成男生不重复的名字 | |
| HashSet<String> boyhs = new HashSet<>(); | |
| while (true) { | |
| if (boyhs.size() == boyCount) { | |
| break; | |
| } | |
| //随机 | |
| Collections.shuffle(familyNameList); | |
| Collections.shuffle(boyNameList); | |
| boyhs.add(familyNameList.get(0) + boyNameList.get(0)); | |
| } | |
| //System.out.println(boyhs); | |
| //2、生成女生不重复的名字 | |
| HashSet<String> girlhs = new HashSet<>(); | |
| while (true) { | |
| if (girlhs.size() == girlCount) { | |
| break; | |
| } | |
| //随机 | |
| Collections.shuffle(familyNameList); | |
| Collections.shuffle(girlNameList); | |
| girlhs.add(familyNameList.get(0) + girlNameList.get(0)); | |
| } | |
| //System.out.println(girlhs); | |
| //3、生成男生信息并添加到集合当中 | |
| ArrayList<String> list = new ArrayList<>(); | |
| Random r = new Random(); | |
| for (String boyName : boyhs) { | |
| int age = r.nextInt(10) + 18; | |
| list.add(boyName + "-男-" + age + "-1"); | |
| } | |
| //4、生成女生信息并添加到集合当中 | |
| for (String girlName : girlhs) { | |
| int age = r.nextInt(8) + 18; | |
| list.add(girlName + "-女-" + age + "-1"); | |
| } | |
| return list; | |
| } | |
| /* | |
| * 作用:根据正则表达式获取字符串中的数据 | |
| * | |
| * 参数一: | |
| * 完整的字符串 | |
| * | |
| * 参数二: | |
| * 正则表达式 | |
| * | |
| * 返回值: | |
| * 真正想要的数据 | |
| * | |
| * */ | |
| private static ArrayList<String> getData(String str, String regex, int index) { | |
| //1、创建集合存放数据 | |
| ArrayList<String> list = new ArrayList<>(); | |
| //2、按照正则表达式的规则,去获取数据 | |
| Pattern pattern = Pattern.compile(regex); | |
| //3、按照pattern的规则,到str当中获取数据 | |
| Matcher matcher = pattern.matcher(str); | |
| while (matcher.find()) { | |
| String group = matcher.group(index); | |
| list.add(group); | |
| } | |
| return list; | |
| } | |
| /* | |
| * 作用: | |
| * 从网络中爬取数据,把数据拼接成字符串返回 | |
| * 形参: | |
| * 网址 | |
| * 返回值: | |
| * 爬取到的所有数据 | |
| * */ | |
| public static String webCrawler(String net) throws IOException { | |
| //1、定义StringBuilder拼接爬取到的数据 | |
| StringBuilder sb = new StringBuilder(); | |
| //2、创建一个URL对象 | |
| URL url = new URL(net); | |
| //3、链接上这个网址 | |
| //细节:保证网络是通畅的,而且这个网址是可以链接上的 | |
| URLConnection conn = url.openConnection(); | |
| //4、读取数据 | |
| InputStreamReader isr = new InputStreamReader(conn.getInputStream()); | |
| int ch; | |
| while ((ch = isr.read()) != -1) { | |
| sb.append((char) ch); | |
| } | |
| //5、释放资源 | |
| isr.close(); | |
| //6、把读取到的数据返回 | |
| return sb.toString(); | |
| } | |
| } | |