題目:
具體文字內容如下:
練習:制造假數據
需求:制造假數據是開發中的一項重要能力,從各個網站爬取數據是其中的一種方法。
獲取姓氏示例及鏈接:
趙錢孫李 周吳鄭王
鏈接:百家姓_詩詞_百度漢語
男生名字示例及鏈接:
子軒 浩宇 浩然 博文 宇軒 子涵 南淳 皓軒 梓軒
鏈接:男生有詩意的名字推薦(龍年男孩起名)
女生名字示例及鏈接:
子涵 怡萱 梓涵 晨曦 紫涵 詩涵 夢琪 慧怡 子萱 雨涵
鏈接:2024年清新有詩意女孩名字取名(龍年女孩名字)
獲取它們的信息組成姓名+性別+年齡
代碼 :
先通過方法獲取鏈接里的信息:
先new一個StringBuilder類,再new一個URL類,通過URL里的方法獲取鏈接里的數據,因為是字節流所以要使用轉換流轉換成字符流,再把里面的數據裝入StringBuilder里,使用StringBuilder.append方法,再釋放資源
public static String name(String str) throws IOException {//用來打印類StringBuilder builder = new StringBuilder();//創建URL對象URL url = new URL(str);//鏈接網站URLConnection urlConnection = url.openConnection();//讀取里面的數據InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream());int len;while ((len=inputStreamReader.read())!=-1){builder.append((char) len);}inputStreamReader.close();return builder.toString();}
?我們再通過正則表達式來自定規則 先new一個數組 再通過Pattern.compile(str)自定規則,把這個規則放在網絡中的數據中compile.matcher(name);再通過while循環判斷判斷符合規則matcher.find()
,符合打印到數組中list.add(matcher.group(a));
private static ArrayList<String> getData(String name, String str,int a) {ArrayList<String> list = new ArrayList<>();//以str為規則Pattern compile = Pattern.compile(str);//套用規則Matcher matcher = compile.matcher(name);while (matcher.find()){list.add(matcher.group(a));}return list;}
姓氏:
ArrayList<String> list = getData(name, "([\\u4E00-\\u9FA5]{4})(,|。)", 1);
男生名:
ArrayList<String> list2 = getData(name1, "([\\u4E00-\\u9FA5]{2})(、|。)", 1);
女生名:
ArrayList<String> list3 = getData(name2, "(.. ){4}..", 0);
把它們的數據裝入各自的數組中
通過這些數據來做題
隨機男女生人數 ,不重復,隨機姓名,隨機年齡
請看代碼:
private static ArrayList<String> GetInFos(ArrayList<String> surname,ArrayList<String> boy,ArrayList<String> girl,int Count,int count){//隨機男生HashSet<String> strings = new HashSet<>();while (true){if (strings.size()==Count){break;}Collections.shuffle(surname);Collections.shuffle(boy);strings.add(surname.get(0)+boy.get(0));}HashSet<String> strings1 = new HashSet<>();while (true){if (strings1.size()==count){break;}Collections.shuffle(surname);Collections.shuffle(girl);strings1.add(surname.get(0)+girl.get(0));}ArrayList<String> list = new ArrayList<>();Random random = new Random();//男生for (String string : strings) {int i1 = random.nextInt(10) + 18;list.add(string+"-男-"+i1);}//女生for (String string : strings1) {int i1 = random.nextInt(8) + 18;list.add(string+"-女-"+i1);}return list;}
最后統統放入一個數組中。
全部代碼:
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Demo1 {public static void main(String[] args) throws IOException {String a = "https://hanyu.baidu.com/shici/detail?pid=0b2f26d4c0ddb3ee693fdb1137ee1b0d&from=kg0";String b = "http://www.haoming8.cn/baobao/10881.html";String c = "http://www.haoming8.cn/baobao/7641.html";String name = name(a);String name1 = name(b);String name2 = name(c);//中文[\u4E00-\u9FA5]//姓氏ArrayList<String> surname = new ArrayList<>();ArrayList<String> list = getData(name, "([\\u4E00-\\u9FA5]{4})(,|。)", 1);for (String s : list) {for (int i1 = 0; i1 < s.length(); i1++) {char at = s.charAt(i1);surname.add(at+"");}}//去重復//男生ArrayList<String> list5 = new ArrayList<>();ArrayList<String> list2 = getData(name1, "([\\u4E00-\\u9FA5]{2})(、|。)", 1);for (String s : list2) {if (!list5.contains(s)){list5.add(s);}}//女生ArrayList<String> list4 = new ArrayList<>();ArrayList<String> list3 = getData(name2, "(.. ){4}..", 0);for (String s : list3) {//以空格為分隔符String[] split = s.split(" ");for (String string : split) {list4.add(string);}}ArrayList<String> list1 = GetInFos(surname, list5, list4, 20, 20);for (int i1 = 0; i1 < list1.size(); i1++) {String s = list1.get(i1);System.out.println(s);}}private static ArrayList<String> GetInFos(ArrayList<String> surname,ArrayList<String> boy,ArrayList<String> girl,int Count,int count){//隨機男生HashSet<String> strings = new HashSet<>();while (true){if (strings.size()==Count){break;}Collections.shuffle(surname);Collections.shuffle(boy);strings.add(surname.get(0)+boy.get(0));}HashSet<String> strings1 = new HashSet<>();while (true){if (strings1.size()==count){break;}Collections.shuffle(surname);Collections.shuffle(girl);strings1.add(surname.get(0)+girl.get(0));}ArrayList<String> list = new ArrayList<>();Random random = new Random();//男生for (String string : strings) {int i1 = random.nextInt(10) + 18;list.add(string+"-男-"+i1);}//女生for (String string : strings1) {int i1 = random.nextInt(8) + 18;list.add(string+"-女-"+i1);}return list;}
//以正則表達式來制定規則private static ArrayList<String> getData(String name, String str,int a) {ArrayList<String> list = new ArrayList<>();//以str為規則Pattern compile = Pattern.compile(str);//套用規則Matcher matcher = compile.matcher(name);while (matcher.find()){list.add(matcher.group(a));}return list;}//獲取網站內容信息public static String name(String str) throws IOException {//用來打印類StringBuilder builder = new StringBuilder();//創建URL對象URL url = new URL(str);//鏈接網站URLConnection urlConnection = url.openConnection();//讀取里面的數據InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream());int len;while ((len=inputStreamReader.read())!=-1){builder.append((char) len);}inputStreamReader.close();return builder.toString();}
}
每日名言:?太陽每一天都是新的,生命每一天都是美的。