取名 頂 原

前陣子借了一本相關術士的書籍,裏面其中有一章是介紹關於取名的知識。江湖術士取名其中會根據名字的筆畫通過一定的規則來計算,計算其對應的總格、天格、人格、地格以及外格,從而判斷該名對個人運勢的影響是好或壞(人定勝天哈)。這就是名字所謂的數格。

既然如此,剛好我家二寶準備來跟我見面了。那我何不把所有文字通過遍歷、組合,取其筆畫數(對應康字典上的繁體字筆畫),通過上述所說的規則計算後,符合數格數爲吉的文字全部記錄下來,然後再人爲篩選自己所喜歡的文字爲最終名字(因爲計算出來的名字很多都是怪異、滑稽的)...

嗯,技術改變命運的時刻到了。

1.上面需要用到文字對應康熙字典上的繁體字筆畫數。京東--康熙字典--下單--查--對應的筆畫,如果是這麼一個流程,這還叫技術改變命運嗎?

秉着程序員的三大優點:懶惰、急躁、傲慢,雖然我不算一個程序員,但是至少也跟程序員沾親帶故——懶惰。

讓我一個字一個字去查康熙字典,然後記下來,如此,毋寧死。既然懶惰如我,那麼網絡爬蟲走起可好?(可能不算是個爬蟲,充其量算是個蟲卵,不過能達成目標即可)

該“蟲卵”的目標:從康熙字典在線查詢,獲取某個文字的筆畫數,且寫入本地txt。

 

//偏旁部首查字,部首首頁源碼

RequestHTTP

package generatorName;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

/** 
 * @author 蘇寶伢 E-mail:[email protected] 
 * @version 創建時間: 2018年1月18日 上午9:23:30
 */
public class RequestHTTP {
	//通過url訪問地址,然後接受服務器相應回來的內容,存入String中
		public static String getResponseFromUrl(String urlPath){
			String acept = "";
			URL openUrl = null;
			URLConnection conn = null;
			BufferedReader read = null;
			try {
				openUrl = new URL(urlPath);
				conn = openUrl.openConnection();
				read = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));
				String strTemp = "";
				while((strTemp=read.readLine())!=null){
//					acept += new String(strTemp.getBytes("utf-8"),"gb2312");
					acept += strTemp;
				}
			} catch (IOException e) {
				System.out.println("從服務器獲取源文件失敗");
				e.printStackTrace();
			} finally{
				if(read != null){
					try {
						read.close();
					} catch (IOException e) {
						System.out.println("讀取源文件出異常~");
						e.printStackTrace();
					}
				}
			}
			return acept;
		}

}

 

OperationResponseHTTP

package generatorName;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;

/** 
 * @author 蘇寶伢 E-mail:[email protected] 
 * @version 創建時間: 2018年1月18日 上午9:25:53
 */
public class OperationResponseHTTP {
	//按照某個規則(譬如:筆畫,鏈接)來分段截取內容,並存入linkedHashMap中
		public static Map<Integer,String> filterString(String sourceStr,String regex){
			int count = 1;
			int tempNum = 0;
			int firstNum = 1;
			int position = 0;
			LinkedHashMap<Integer,String> linkMap = new LinkedHashMap<>();
			Matcher m = RegularExpressions.matcherMethod(sourceStr,regex);
			while(m.find()){
				position = sourceStr.indexOf(regex + count);
				if(count == firstNum){//第一次進來,只有起始位置
					tempNum = position;
				}else{//通過上一次的位置,加上這一次的位置,截取子字符串
					position = sourceStr.indexOf(regex + count);
					linkMap.put(count - 1, sourceStr.substring(tempNum,position));
					tempNum = position;
				}
				count ++;
			}
			//最後一次截取
			linkMap.put(count - 1, sourceStr.substring(tempNum));
			return linkMap;
		}
		
		//解析存在map中的相應內容
		public static String analysisMap(Map<Integer,String> responeMap){
			for(Map.Entry<Integer, String> entry:responeMap.entrySet()){
				System.out.println(entry.getValue());
			}
//			Iterator<Map.Entry<Integer, String>> iter = responeMap.entrySet().iterator();
//			while(iter.hasNext()){
//				Map.Entry<Integer, String> entry = iter.next();
//				System.out.println("----------------"+entry.getKey() + entry.getValue());
//			}
			return "";
		}
		
	//通過
		public static String getHerfString(Map<Integer,String> m,String sourceStr,String regex){
			m = new LinkedHashMap<>();
			
			return "";
		}
		
	//獲取源碼中的鏈接
		public static List<String> getSourceRUL(String source,String regex){
			ArrayList<String> list = new ArrayList<>();
			Matcher m = RegularExpressions.matcherMethod(source,regex);
			while(m.find()){
				list.add(m.group());
			}
			return list;
		}
		
		//獲取某個部首包含所有漢字的源碼
		public static List<String> getBHOfUrlFromSource(List<String> list,String urlHeader,String regex){
			ArrayList<String> newList = new ArrayList<>();
			for(String strBHSource:list){
				String source = RequestHTTP.getResponseFromUrl(urlHeader + strBHSource);
				ArrayList<String> tempList = (ArrayList<String>)getSourceRUL(source,regex);
				for(String wenzi:tempList){
					newList.add(wenzi);
				}
			}
			return newList;
		}
		
		//獲取某個文字的筆畫和五行所屬
		public static void getWordResult(List<String> list,String urlHeader,String regex){
			Matcher m = null;
			String wordSour = "";
			System.out.println("write start!");
			for(String result:list){
				wordSour = RequestHTTP.getResponseFromUrl(urlHeader + result);
				m = RegularExpressions.matcherMethod(wordSour,regex);
				while(m.find()){
					System.out.println(m.group(1)+m.group(4));
					WriteResultToTxt.writeResult(m.group(1)+"," + m.group(4));
				}
			}
			System.out.println("write end!");
		}
}

TestGetInfo

package generatorName;

import java.util.List;

/** 
 * @author 蘇寶伢 E-mail:[email protected] 
 * @version 創建時間: 2018年1月18日 上午9:46:54
 */
public class TestGetInfo {

	public static void main(String[] args) {
		SetProxy.setProperties();
		String allPPBS = "";
		List<String> list = null;
		
		//偏旁部首查字,部首首頁源碼
		allPPBS = RequestHTTP.getResponseFromUrl("http://tool.httpcn.com/KangXi/BuShou.html");

		//所有部首的url
		list = OperationResponseHTTP.getSourceRUL(allPPBS, "/Html/KangXi/BuShou/.{3,6}.html");
		
		//通過遍歷某一部首的所有漢字,獲取所有漢字的URL
		list = OperationResponseHTTP.getBHOfUrlFromSource(list,"http://tool.httpcn.com/","/Html/KangXi/\\d{1,}/\\w{3,}.shtml");
		//把初步過濾的結果寫到本地
		OperationResponseHTTP.getWordResult(list,"http://tool.httpcn.com/","『([\\u4e00-\\u9fa5]{1})』.*(</span>){1}(\\(([^)]*)\\))");

	}

}
package calcFortune;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

/** 
 * @author 蘇寶伢 E-mail:[email protected] 
 * @version 創建時間: 2018年1月30日 下午1:51:33
 */
public class WriteResultToTxt {
	public static void writeResult(String textContent,String fileName){
		String resultText = textContent;
		try{
			BufferedWriter bw = new BufferedWriter(new FileWriter(new File(".\\" + fileName + ".txt"),true));
			bw.write(resultText,0,resultText.length());
//			bw.newLine();
			bw.close();
			
		}catch(IOException e){
			
		}
		
	}
}

以上代碼執行之後,會在項目當前路徑多一個result.txt文件,內容摘錄如下:

丨, 丨:1; 
丩, 丩:2; 
丫, 丫:3; 
中, 中:4; 
丮, 丮:4; 
丯, 丯:4; 
豐, 豐:4;豐:18; 
丱, 丱:5; 
串, 串:7; 
丳, 丳:8; 
臨, 臨:17; 

公司訪問外網,需要代理,故加上下面這段

SetProxy

package generatorName;
/** 
 * @author 蘇寶伢 E-mail:[email protected] 
 * @version 創建時間: 2018年1月18日 上午9:51:21
 */
public class SetProxy {
	 //設置代理http
		public static void setProperties(){
			System.getProperties().setProperty("proxySet", "true"); 
	        //用的代理服務器  
	        System.getProperties().setProperty("http.proxyHost", "10.158.166.11"); 
	        //代理端口  
	        System.getProperties().setProperty("http.proxyPort", "8080"); 
		}

}

-----------已經有了文字及其對應的筆畫數(可能某個文字由於某種處理規則,被剔除),那麼可以繼續下一步了。爲了不每次都請求在線康熙字典(因爲遍歷所有文字,需要很長時間),故此,下面這部分我搞成另外一個項目。數據直接讀取上面寫好的result.txt。

CalcFortune

package test;

import java.util.Map;
import javax.print.attribute.standard.MediaSize.Other;

/** 
 * @author 蘇寶伢 E-mail:[email protected] 
 * @version 創建時間: 2018年1月30日 下午2:33:46
 */
public class CalcForTune {
	
	public static String calcThreeLengthFortune(Map<String,Integer> nameAndBH,String firstName){
		String allName = firstName;
		int firstNameNo = getBHFromWord(nameAndBH,firstName);
		int middleNameNo = 0;
		int endNameNo = 0;
		boolean flag = false;
		int count = 0;
		for(Map.Entry<String, Integer> middleNameEntry:nameAndBH.entrySet()){
			middleNameNo = middleNameEntry.getValue();
			for(Map.Entry<String, Integer> endNameEntry:nameAndBH.entrySet()){
				endNameNo = endNameEntry.getValue();
				flag = compareNameAndFortune(firstNameNo,middleNameNo,endNameNo);
			
				if(flag){
					count ++;
					String resultOfName = firstName + middleNameEntry.getKey() + endNameEntry.getKey() + ",";
					
					if(count % 16 == 0){
						resultOfName = resultOfName.substring(0,resultOfName.length()-1) + "\r\n";
					}
					WriteResultToTxt.writeResult(resultOfName,"resultName");
					System.out.print(resultOfName);
				}
			}
		}
		System.out.println(count);
		return allName;
	}
	public static int getBHFromWord(Map<String,Integer> nameAndBH,String word){
		if(nameAndBH.get(word)==null) return 0;
		return nameAndBH.get(word);
	}
	
	public static boolean compareNameAndFortune(int firstNameNo,int middleNameNo,int endNameNo){
		/**
		 * 地格 15 的解析:(地格數又稱前運,影響人中年(36歲)以前的活動力。)
		福壽雙全的立身興家數。【大吉】
		基業:天官,貴人,福星、官祿、祖基、進田、畜產。
		家庭:清淨家風,圓滿之象,子孫昌盛。
		健康:海底明珠,安穩餘慶,健康自在。
		含義:此數爲最大好運,福壽圓滿之象。順和、溫良、雅量。多受福澤,德高望重,自成大業,富貴榮華,吉祥有德,繁榮興家的大吉數。
		 */
		int positionNo = 1;
		int totalFortune = firstNameNo + middleNameNo + endNameNo;
		int personFortune = firstNameNo + middleNameNo;
		int earthFortune = middleNameNo + endNameNo;
		int outFortune = endNameNo + positionNo;
		
		for(int fortune:getLuckFortuneNo()){
			if(fortune == totalFortune&&totalFortune>=28 &&totalFortune <= 42 && totalFortune != 38){
//			if(fortune == totalFortune){
				for(int fortunePerson:getLuckFortuneNo()){
					if(fortunePerson == personFortune){
						for(int fortuneEarth:getLuckFortuneNo()){
							if(fortuneEarth == earthFortune){
								for(int fortuneOut:getLuckFortuneNo()){
									if(fortuneOut == outFortune){
										return true;
									}
								}
							}
						}
					}
				}
			}
		}
		return false;
	}
	public static int[] getLuckFortuneNo(){
		//女孩32好,11,21和23,33不好
		int[] luckFortune = {1,3,5,6,7,8,11,13,15,16,24,31,32,35,37,41,45,47,48,52,57,61,63,65,67,68,81};
//		int[] luckFortune = {11,13,15,16,24,31,32,33,35,37,38,39,41,45,47,48,52,57,61,63,65,67,68,81};
		return luckFortune;
	}

}

 

package calcFortune;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

/** 
 * @author 蘇寶伢 E-mail:[email protected] 
 * @version 創建時間: 2018年1月31日 上午10:48:57
 */
public class OperationLocalFile {

	public static String analyzeString(String[] content) {
		String joint = "";
		ArrayList<Integer> list = new ArrayList<>();
		int arrayFirstElement = 0,arrayTwoElement = 1,arrayEndElement = 2;
		//String[] content = "託, 託:10;託:7; ,是否爲常用字:否".split(",");
		for(int i=0;i<content.length;i++){
			if(i == arrayFirstElement) joint = content[i];
			else if(i == arrayTwoElement){
                if(content[i].trim().length() == 0)	return "";
				String[] tempStr = content[i].trim().split(";");
				for(int k=0;k<tempStr.length;k++){
					list.add(Integer.valueOf(tempStr[k].replaceAll("\\D", "")));
				}
				joint = joint + "," + Collections.max(list);
			}else {
				joint = joint + "," + content[arrayEndElement].substring(content[arrayEndElement].length()-1);
			}
		}
		return joint;
	}
	
	//取最大筆畫數
	public static int getMaxBHWord(String[] content){
		//String[] content = "託, 託:10;託:7; ,是否爲常用字:否".split(",");
		ArrayList<Integer> list = new ArrayList<>();
		
		for(int i=0;i<content.length;i++){
			if(i == 1){
                if(content[i].trim().length() == 0)	return 0;
				String[] tempStr = content[i].trim().split(";");
				for(int k=0;k<tempStr.length;k++){
					list.add(Integer.valueOf(tempStr[k].replaceAll("\\D", "")));
				}
			}
		}
//		return compareNumOfMax(list);
		return Collections.max(list);
	}
	
	//獲取筆畫最多的筆畫
	public static int compareNumOfMax(ArrayList<Integer> parms){
		int result = 0;
		for(int i=0;i<parms.size();i++){
//			System.out.println("parms[" + i + "]" + ":" + parms[i]);
			if(i !=0){
				if(parms.get(i-1) < parms.get(i)){
					result = parms.get(i);
				}else{
					parms.set(i,result);
				}
			}else{
				result = parms.get(i);
			}
		}
		
		return result;
	}
	
	//通過文字,獲取其對應筆畫
	public static int getNumberFromWord(Map<String,Integer> datasource,String word){
		for(Entry<String,Integer> set:datasource.entrySet()){
			if(set.getKey().equals(word)){
				return set.getValue();
			}
		}
		return 0;
	}
	
	//輸入某個筆畫,然後匹配出所有該筆畫的文字
	public static List<String> findWordAboutNumber(Map<String,Integer> dataSource,int bhNo){
		
		List<String> wordList = new ArrayList<>();
		
		for(Entry<String,Integer> set:dataSource.entrySet()){
			if(bhNo == set.getValue()){
				wordList.add(set.getKey());
			}
		}
		return wordList;
	}
}

 

package calcFortune;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;

/** 
 * @author 蘇寶伢 E-mail:[email protected] 
 * @version 創建時間: 2018年1月30日 下午1:50:06
 */
public class ReadResultFromLocal {

public static Map<String,Integer> getResultFromLocalFile(String filePath){
		
		BufferedReader br = null ;
		String tempStr = "";
		String[] tempArr = null;
		Map<String,Integer> mapNameAndBH = new LinkedHashMap<String,Integer>();

		try{
			br = new BufferedReader(new FileReader(new File(filePath)));

			while((tempStr=br.readLine())!=null){
				tempArr = tempStr.split(",");
				tempArr = OperationLocalFile.analyzeString(tempArr).split(",");
				if(tempArr.length<=1){
//					System.out.println(tempStr);
					continue;
				}
				mapNameAndBH.put(tempArr[0], Integer.valueOf(tempArr[1]));
			}
		}catch(IOException fnf){
			System.out.println("沒有該文件或目錄");
			fnf.printStackTrace();
		}finally{
			try{
				br.close();
			}catch(IOException e){
				System.out.println("關閉以前關閉的流無效~!");
				e.printStackTrace();
			}
		}
		return mapNameAndBH;
	}
}


 

package calcFortune;

import java.util.Map;
import java.util.Scanner;

/** 
 * @author 蘇寶伢 E-mail:[email protected] 
 * @version 創建時間: 2018年1月30日 下午1:42:38
 */
public class Test {
	public static void main(String[] args){
		Map<String,Integer> nameAndBH = ReadResultFromLocal.getResultFromLocalFile("./LocalDate.txt");
		CalcForTune.calcThreeLengthFortune(nameAndBH,"蘇");
//		findAllWordFromBH(22);
//		System.out.println(getBHfromWord("蘇"));
//		System.out.println(getBHfromWord("美"));
//		System.out.println(getBHfromWord("冰"));
//		System.out.println(CalcForTune.compareNameAndFortune(getBHfromWord("蘇"),getBHfromWord("美"),getBHfromWord("冰")));
	}
	
	public static void findAllWordFromBH(int bhNo){
		Map<String,Integer> nameAndBH = ReadResultFromLocal.getResultFromLocalFile("./sourceWordAll.txt");
		System.out.println(OperationLocalFile.findWordAboutNumber(nameAndBH, bhNo));
	}
	
	public static int getBHfromWord(String word){
		Map<String,Integer> nameAndBH = ReadResultFromLocal.getResultFromLocalFile("./sourceWordAll.txt");
		return OperationLocalFile.getNumberFromWord(nameAndBH, word);
	}
}

 

------End!整個項目到此結束。下面是寫這個項目中的一些歷史代碼和數格資料。

------End!整個項目到此結束。下面是寫這個項目中的一些歷史代碼和數格資料。

------End!整個項目到此結束。下面是寫這個項目中的一些歷史代碼和數格資料。

 

 

32最適合女孩子的數理,可以總格。蘇姓筆畫爲22.其天格爲22+1=23,其五行屬火

一二爲木,一爲陽木,二爲陰木,三四爲火,五六爲土,七八爲金,九O爲水,奇爲陽,偶爲陰

三才配

 

1.先取筆畫
http://tool.httpcn.com/KangXi/BuShou.html
筆畫2,且拿到該筆畫數的所有部首
http://tool.httpcn.com/Html/KangXi/BuShou/2_9.html         /Html/KangXi/BuShou/2_9.html
2.進入該部首,拿到所有的漢字
/Html/KangXi/41/ILAZXVILMERNFXVF.shtml
3.進入漢字頁,取
a.康熙字典筆畫
//*[@id="div_a1"]/table/tbody/tr/td[2]/p

b.民俗參考
//*[@id="div_a1"]/div[1]

 

正則表達式

//		OperationResponseHTTP.getWordResult(list,"http://tool.httpcn.com/","『([\\u4e00-\\u9fa5]{1})』.*(</span>){1}(\\(([^)]*)\\)).*(漢字五行:.{1}).*(是否爲常用字:是).*(姓名學:.{0,1})");
//		OperationResponseHTTP.getWordResult(list,"http://tool.httpcn.com/","『([\\u4e00-\\u9fa5]{1})』.*(</span>){1}(\\(([^)]*)\\))");
		OperationResponseHTTP.getWordResult(list,"http://tool.httpcn.com/","『([\\u4e00-\\u9fa5]{1})』.*(</span>){1}(\\(([^)]*)\\)).*(是否爲常用字:.{1})");
*/
		//從本地文件中讀取待處理的數據
		ReadResultFromLocal.getResultFromLocalFile("./result.txt");
//		OperationResponseHTTP.getWordResult(list,"http://tool.httpcn.com/","『([\\u4e00-\\u9fa5]{1})』.*(</span>){1}(\\(([^)]*)\\))");

//		OperationResponseHTTP.getWordResult(list,"http://tool.httpcn.com/","漢字五行:.{1}");
//		OperationResponseHTTP.getBHSource(list,"http://tool.httpcn.com/","/Html/KangXi/\\d{1,}/\\w{3,}.shtml");
	}


 

OperationLocalFile

package test;

import java.util.ArrayList;
import java.util.Collections;

/** 
 * @author 蘇寶伢 E-mail:[email protected] 
 * @version 創建時間: 2018年1月25日 下午10:25:10
 */
public class OperationLocalFile {

	public static String analyzeString(String[] content) {
		String joint = "";
		ArrayList<Integer> list = new ArrayList<>();
		int arrayFirstElement = 0,arrayTwoElement = 1,arrayEndElement = 2;
		//String[] content = "託, 託:10;託:7; ,是否爲常用字:否".split(",");
		for(int i=0;i<content.length;i++){
			if(i == arrayFirstElement) joint = content[i];
			else if(i == arrayTwoElement){
                if(content[i].trim().length() == 0)	return "";
				String[] tempStr = content[i].trim().split(";");
				for(int k=0;k<tempStr.length;k++){
					list.add(Integer.valueOf(tempStr[k].replaceAll("\\D", "")));
				}
				joint = joint + "," + Collections.max(list);
			}else {
				joint = joint + "," + content[arrayEndElement].substring(content[arrayEndElement].length()-1);
			}
		}
		return joint;
	}
	//去最大筆畫數
	public static int getMaxBHWord(String[] content){
		//String[] content = "託, 託:10;託:7; ,是否爲常用字:否".split(",");
		ArrayList<Integer> list = new ArrayList<>();
		
		for(int i=0;i<content.length;i++){
			if(i == 1){
                if(content[i].trim().length() == 0)	return 0;
				String[] tempStr = content[i].trim().split(";");
				for(int k=0;k<tempStr.length;k++){
					list.add(Integer.valueOf(tempStr[k].replaceAll("\\D", "")));
				}
			}
		}
//		return compareNumOfMax(list);
		return Collections.max(list);
	}
	
	//獲取筆畫最多的筆畫
	public static int compareNumOfMax(ArrayList<Integer> parms){
		int result = 0;
		for(int i=0;i<parms.size();i++){
//			System.out.println("parms[" + i + "]" + ":" + parms[i]);
			if(i !=0){
				if(parms.get(i-1) < parms.get(i)){
					result = parms.get(i);
				}else{
					parms.set(i,result);
				}
			}else{
				result = parms.get(i);
			}
		}
		
		return result;
	}
}

 

OperationResponseHTTP

package generatorName;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;

/** 
 * @author 蘇寶伢 E-mail:[email protected] 
 * @version 創建時間: 2018年1月18日 上午9:25:53
 */
public class OperationResponseHTTP {
	//按照某個規則(譬如:筆畫,鏈接)來分段截取內容,並存入linkedHashMap中
		public static Map<Integer,String> filterString(String sourceStr,String regex){
			int count = 1;
			int tempNum = 0;
			int firstNum = 1;
			int position = 0;
			LinkedHashMap<Integer,String> linkMap = new LinkedHashMap<>();
			Matcher m = RegularExpressions.matcherMethod(sourceStr,regex);
			while(m.find()){
				position = sourceStr.indexOf(regex + count);
				if(count == firstNum){//第一次進來,只有起始位置
					tempNum = position;
				}else{//通過上一次的位置,加上這一次的位置,截取子字符串
					position = sourceStr.indexOf(regex + count);
					linkMap.put(count - 1, sourceStr.substring(tempNum,position));
					tempNum = position;
				}
				count ++;
			}
			//最後一次截取
			linkMap.put(count - 1, sourceStr.substring(tempNum));
			return linkMap;
		}
		
		//解析存在map中的相應內容
		public static String analysisMap(Map<Integer,String> responeMap){
			for(Map.Entry<Integer, String> entry:responeMap.entrySet()){
				System.out.println(entry.getValue());
			}
//			Iterator<Map.Entry<Integer, String>> iter = responeMap.entrySet().iterator();
//			while(iter.hasNext()){
//				Map.Entry<Integer, String> entry = iter.next();
//				System.out.println("----------------"+entry.getKey() + entry.getValue());
//			}
			return "";
		}
		
	//通過
		public static String getHerfString(Map<Integer,String> m,String sourceStr,String regex){
			m = new LinkedHashMap<>();
			
			return "";
		}
		
	//獲取源碼中的鏈接
		public static List<String> getSourceRUL(String source,String regex){
			ArrayList<String> list = new ArrayList<>();
			Matcher m = RegularExpressions.matcherMethod(source,regex);
			while(m.find()){
				list.add(m.group());
			}
			return list;
		}
		
		//獲取某個部首包含所有漢字的源碼
		public static List<String> getBHOfUrlFromSource(List<String> list,String urlHeader,String regex){
			ArrayList<String> newList = new ArrayList<>();
			for(String strBHSource:list){
				String source = RequestHTTP.getResponseFromUrl(urlHeader + strBHSource);
				ArrayList<String> tempList = (ArrayList<String>)getSourceRUL(source,regex);
				for(String wenzi:tempList){
					newList.add(wenzi);
				}
			}
			return newList;
		}
		
		//獲取某個文字的筆畫和五行所屬
		public static void getWordResult(List<String> list,String urlHeader,String regex){
			Matcher m = null;
			String wordSour = "";
			System.out.println("write start!");
			for(String result:list){
				wordSour = RequestHTTP.getResponseFromUrl(urlHeader + result);
				m = RegularExpressions.matcherMethod(wordSour,regex);
				while(m.find()){
//					WriteResultToTxt.writeResult(m.group(1)+m.group(4)+m.group(5)+m.group(6)+m.group(7));
					WriteResultToTxt.writeResult(m.group(1)+"," + m.group(4) +","+ m.group(5));
				}
			}
			System.out.println("write end!");
		}
}

ReadResultFromLocal

package generatorName;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

/** 
 * @author 蘇寶伢 E-mail:[email protected] 
 * @version 創建時間: 2018年1月25日 下午4:50:21
 */
public class ReadResultFromLocal {
	
	public static void getResultFromLocalFile(String filePath){
		
		BufferedReader br = null ;
		String tempStr = "";

		try{
			br = new BufferedReader(new FileReader(new File(filePath)));

			while((tempStr=br.readLine())!=null){
//				System.out.println(tempStr);
				System.out.println(OperationLocalFile.getMaxBHWord(tempStr.split(",")));
			}
		}catch(IOException fnf){
			System.out.println("沒有該文件或目錄");
			fnf.printStackTrace();
		}finally{
			try{
				br.close();
			}catch(IOException e){
				System.out.println("關閉以前關閉的流無效~!");
				e.printStackTrace();
			}
		}
	}

	public static Map<String,String> getBHFromlocalFile(String filePath) {
		Map<String,String> mapName = new LinkedHashMap<>();
		BufferedReader br = null;
		String tempStr = "";
		try {
			br = new BufferedReader(new FileReader(new File(filePath)));
			while ((tempStr = br.readLine()) != null) {
				String[] wordAndBH = tempStr.split(",");
				mapName.put(wordAndBH[0], wordAndBH[1]);
			}
		} catch (IOException fnf) {
			System.out.println("沒有該文件或目錄");
			fnf.printStackTrace();
		} finally {
			try {
				br.close();
			} catch (IOException e) {
				System.out.println("關閉以前關閉的流無效~!");
				e.printStackTrace();
			}
		}
		return mapName;
	}

}

RegularExpressions

package generatorName;

import java.util.regex.Matcher;
import java.util.regex.Pattern;


/** 
 * @author 蘇寶伢 E-mail:[email protected] 
 * @version 創建時間: 2018年1月18日 上午10:29:10
 */
public class RegularExpressions {
	
	public static Matcher matcherMethod(String source,String regex){
		Pattern p = Pattern.compile(regex);
		return p.matcher(source);
	}

}

 

RequestHTTP

package generatorName;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

/** 
 * @author 蘇寶伢 E-mail:[email protected] 
 * @version 創建時間: 2018年1月18日 上午9:23:30
 */
public class RequestHTTP {
	//通過url訪問地址,然後接受服務器相應回來的內容,存入String中
		public static String getResponseFromUrl(String urlPath){
			String acept = "";
			URL openUrl = null;
			URLConnection conn = null;
			BufferedReader read = null;
			try {
				openUrl = new URL(urlPath);
				conn = openUrl.openConnection();
				read = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));
				String strTemp = "";
				while((strTemp=read.readLine())!=null){
//					acept += new String(strTemp.getBytes("utf-8"),"gb2312");
					acept += strTemp;
				}
			} catch (IOException e) {
				System.out.println("從服務器獲取源文件失敗");
				e.printStackTrace();
			} finally{
				if(read != null){
					try {
						read.close();
					} catch (IOException e) {
						System.out.println("讀取源文件出異常~");
						e.printStackTrace();
					}
				}
			}
			return acept;
		}

}

 

TestGetInfo

package generatorName;

import java.util.List;

/** 
 * @author 蘇寶伢 E-mail:[email protected] 
 * @version 創建時間: 2018年1月18日 上午9:46:54
 */
public class TestGetInfo {

	public static void main(String[] args) {
		SetProxy.setProperties();
		String allPPBS = "";
		List<String> list = null;
/*		
		//偏旁部首查字,部首首頁源碼
		allPPBS = RequestHTTP.getResponseFromUrl("http://tool.httpcn.com/KangXi/BuShou.html");

		//所有部首的url
		list = OperationResponseHTTP.getSourceRUL(allPPBS, "/Html/KangXi/BuShou/.{3,6}.html");
		
		//通過遍歷某一部首的所有漢字,獲取所有漢字的URL
		list = OperationResponseHTTP.getBHOfUrlFromSource(list,"http://tool.httpcn.com/","/Html/KangXi/\\d{1,}/\\w{3,}.shtml");
		//把初步過濾的結果寫到本地
//		OperationResponseHTTP.getWordResult(list,"http://tool.httpcn.com/","『([\\u4e00-\\u9fa5]{1})』.*(</span>){1}(\\(([^)]*)\\)).*(漢字五行:.{1}).*(是否爲常用字:是).*(姓名學:.{0,1})");
//		OperationResponseHTTP.getWordResult(list,"http://tool.httpcn.com/","『([\\u4e00-\\u9fa5]{1})』.*(</span>){1}(\\(([^)]*)\\))");
		OperationResponseHTTP.getWordResult(list,"http://tool.httpcn.com/","『([\\u4e00-\\u9fa5]{1})』.*(</span>){1}(\\(([^)]*)\\)).*(是否爲常用字:.{1})");
*/
		//從本地文件中讀取待處理的數據
		ReadResultFromLocal.getResultFromLocalFile("./result.txt");
//		OperationResponseHTTP.getWordResult(list,"http://tool.httpcn.com/","『([\\u4e00-\\u9fa5]{1})』.*(</span>){1}(\\(([^)]*)\\))");

//		OperationResponseHTTP.getWordResult(list,"http://tool.httpcn.com/","漢字五行:.{1}");
//		OperationResponseHTTP.getBHSource(list,"http://tool.httpcn.com/","/Html/KangXi/\\d{1,}/\\w{3,}.shtml");
	}

}

 

TestRespone

package generatorName;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


/** 
 * @author 蘇寶伢 E-mail:[email protected] 
 * @version 創建時間: 2018年1月18日 下午3:29:40
 */
public class TestRespone {

	public static void main(String[] args) {
		SetProxy.setProperties();
		String testPrint = "<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//ENhttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd><html xmlns=http://www.w3.org/1999/xhtml><head><meta http-equiv=Content-Type content=text/html; charset=utf-8 /><title>康熙字典:中,“中”康熙字典筆畫,繁體筆畫,漢字五行_HttpCN</title><meta name=Description content=網絡中國提供“中”的康熙字典意思解釋、康熙字典筆畫、康熙字典掃描原圖、起名用漢字五行等。 /><!--content_l--><div class=content_l><script>Setkangxileft();Setzileftad()</script></div><!--content_l /--><!--content_m /--><div class=content_m><div class=content_nav><a href=/>首頁</a> > <a href=/KangXi/>康熙字典</a> > 中</div<script>Setzicenter_01();</script><div class=content_dh><table border=0 cellpadding=0 cellspacing=0 id=tab_zi><tr><td class=bg_86_1>康熙字典</td><td class=bg_86_2 onclick=location.href('/Html/KangXi/Pic/79.shtml#中')>掃描版</td><td class=bg_86_2 onclick=Set_soword('zi')>更多解釋</td></tr></table></div><script>Setzicenter_02();</script><!--div_a1--><div id=div_a1 style=display:block ><table width=620 border=0 cellpadding=0 cellspacing=0><tr bgcolor=#FFFFFF><td width=100><div id=zibg><p class=U4E2D></p></div></td><td width=510 style=padding-left:10px><p class=text15>『中』 <br /><span class=b>拼音:</span><span class=pinyin>zhòng<script>Setduyin('Duyin/zhong4')</script> zhōng<script>Setduyin('Duyin/zhong1')</script></span> <span class=b>注音:</span><span class=pinyin>ㄓㄨㄥˋ<script>Setduyin('Duyin/zhong4')</script> ㄓㄨㄥ<script>Setduyin('Duyin/zhong1')</script></span><br /><span class=b>部首:</span>丨 <span class=b>部首筆畫:</span>1 <span class=b>總筆畫:</span>4<br /><span class=b>康熙字典筆畫</span>( 中:4; )</p></td><div class=text16><span class=zi18b>◎ 民俗參考</span><br />漢字五行:火 吉凶寓意:吉 是否爲常用字:是<br />姓名學:姓<br /><br /><hr class=hr /></div><div class=text16><span class=zi18b>◎ 字形結構</span><br />[ <span class=b>首尾分解查字</span> ]:口丨(koushu)[ <span class=b>漢字部件構造</span> ]:中<br />[ <span class=b>筆順編號</span> ]:2512<br />[ <span class=b>筆順讀寫</span> ]:豎折橫豎<br /><br /><hr class=hr /></div><div class=content16><span class=zi18b>◎ 康熙字典解釋</span><br /><strong style=background:#F6F0EF>【子集上】【丨字部】 中; 康熙筆畫:4; 頁碼:<a href=/Html/KangXi/Pic/79.shtml#中 class=a16blue target=_blank><span style=font-weight:300>頁79第03(點擊查看原圖)</span></a></strong><br />〔古文〕【唐韻】陟弓切【集韻】【韻會】【正韻】陟隆切,音忠。【書·大禹謨】允執厥中。【周禮·地官·大司徒】以五禮防民僞,而敎之中。【左傳·成十三年】劉子曰:民受天地之中以生。 又【左傳·文元年】舉正於中,民則不惑。【註】舉中氣也。 又司中,星名。在太微垣。【周禮·春官·大宗伯】以槱燎祀司中司命飌師雨師。 又【前漢·律歷志】春爲陽中,萬物以生。秋爲隂中,萬物以成。 又中央,四方之中也。【書·召誥】王來紹上帝,自服於土中。【註】洛爲天地之中。【張衡·東京賦】宅中圓大。 又正也。【禮·儒行】儒有衣冠中。【周禮·秋官·司刺】以此三法者求民情,斷民中,施上服下服之罪。【註】斷民罪,使輕重得中也。 又心也。【史記·韓安國傳】深中寬厚。 又內也。【易·坤卦】黃裳元吉,文在中也。又【老子·道德經】多言數窮,不如守中。 又半也。【列子·力命篇】得亦中,亡亦中。【魏志·管輅傳】鼓一中。【註】猶言鼓一半也。 又成也。【禮·禮器】因名山升中於天。【註】中,猶成也。燔柴祭天,告以諸侯之成功也。 又滿也。【前漢·百官表】制中二千石。【註】謂滿二千石也。【索隱】漢制,九卿已上,秩一歲,滿二千石。 又穿也。【周禮·冬官考工記】中其莖。【註】謂穿之也。 又盛算器。【禮·投壺】主人奉矢,司射奉中。【註】士鹿中,大夫兕中,刻木如兕鹿而伏,背上立圓圈,以盛算也。 又【禮·深衣註】衣有表者,謂之中衣。與衷通。 又俚語。以不可爲不中。【蕭參希通錄】引左傳成公二年,無能爲役。杜預註:不中爲之役使。 又【禮·鄕飲酒義】冬之爲言中也。中者,藏也。 又姓。漢少府卿中京。又中行,中英,中樑,中壘,中野,皆複姓。 又【廣韻】【集韻】【韻會】陟仲切,音妕。矢至的曰中。【史記·周本紀】養由基去柳葉百步,射之,百發百中。 又著其中曰中。【莊子·達生篇】中身當心則爲病,猶醫書中風,中暑是也。 又要也。【周禮·春官】凡官府鄕州及都鄙之治中,受而藏之。【註】謂治職簿書之要也。 又應也。【禮·月令】律中大簇。【註】中猶應也。 又合也。【左傳·定元年】季孫曰:子家子亟言於我,未嘗不中吾志也。 又【類篇】【正韻】直衆切。與仲通。【禮·月令】中呂,卽仲呂, 又讀作得。【周禮·地官】師氏掌國中失之事。【註】故書中爲得。陸德明雲:中,杜音得。 又【韻補】葉陟良切,音章。師古曰:古讀中爲章。【吳志·胡綜傳·黃龍大牙賦】四靈旣布,黃龍處中。周制日月,是曰太常。 又葉諸仍切,音徵。【劉貢父·詩話】關中讀中爲。【詩·大雅】泉之竭兮,不雲自中。葉上頻。【班固·高祖泗水亭】天期乗祚受爵漢中。葉下秦。古東韻與庚陽通。 俗讀中酒之中爲去聲。中與之中爲平聲。◎按《魏志·徐邈傳》:邈爲尚書郞,時禁酒。邈私飮沈醉,趙達問以曹事,曰中聖人。時謂酒淸爲聖人,濁者爲賢人。蘇軾詩:公特未知其趣耳,臣今時復一中之。則中酒之中,亦可讀平聲。《通鑑》:周宣王成中與之名,註:當也。杜詩:今朝漢社稷,新數中與年。則中與之中亦可讀去聲。<hr class=hrline>考證:〔【班固·東都賦】宅中圓大。〕 謹照原書改張衡東京賦。 〔【周禮·春官·司刺】以刺宥三法,求民情,斷民中。〕 謹照原文春官改秋官。以刺宥三法求民情,改以此三法者求民情。〔【易·坤卦】黃裳元吉,美在中也。〕 謹照原文美在中也改文在中也。 〔【左傳·定元年】季孫曰:子家亟言於我,未嘗不中吾志也。〕 謹照原文子家下增子字。 〔【周禮·天官】凡官府鄕州及都鄙之治中,受而藏之。〕 謹照原書天官改春官。</div><div class=text16><hr class=hr /><span class=zi18b>◎ 音韻參考</span><br />[ <span class=b>上古音</span> ]:侵部端母,tiu?m<br />[ <span class=b>廣 韻</span> ]:陟弓切,上平1東,zhōng,通開三平東知<br />[ <span class=b>平水韻</span> ]:上平一東·去聲一送<br />[ <span class=b>唐 音</span> ]:*djiùng,djiung<br />[ <span class=b>國 語</span> ]:zhōng,zhòng<br />[ <span class=b>粵 語</span> ]:zung1<script>Setduyin('Yueyin/zung1')</script>zung3<script>Setduyin('Yueyin/zung3')</script><br /><br /></div><div class=text16><hr class=hr /><span class=zi18b>◎ 索引參考</span><br />[ <span class=b>古文字詁林</span> ]:01冊,第10部,丨部,2<br />[ <span class=b>故訓彙纂</span> ]:25|0103.4<br />[ <span class=b>說文解字</span> ]:編號0231,第01捲上,丨部第2字<br />[ <span class=b>康熙字典</span> ]:<a href=/Html/KangXi/Pic/79.shtml#中 class=a16blue target=_blank>頁79第03(點擊查看原圖)</a><br />[ <span class=b>漢語字典</span> ]:卷1頁0028第10<br />[ <span class=b>&nbsp;&nbsp;辭 海&nbsp;&nbsp;</span> ]:卷3頁7402第<br /><br /></div></div><!--div_a1 /--><div class=body_info><script>Setzicenter_04();</script><hr class=ShowLine><script>SetCopy();</script>【<a href='javascript:SetShcang();'>收藏本頁</a>】【<a href=javascript:window.print()>打印</a>】【<a href=javascript:self.close()>關閉</a>】【<a href=#top>頂部</a>】</div></div><!--content_m /--><!--content_r--><div class=content_r><script>Setziright();</script></div><!--content_r /--></div><!--content /--><!--bottom--><script>Setdown()</script><!--bottom /--></body></html><noscript><iframe src=/></iframe></noscript><script>Settongji();Setcount('kangxi',code)</script> 是否爲常用字:是<br />姓名學:姓<br /><br ";
		//all_regex=『([\\u4e00-\\u9fa5]{1})』.*(</span>){1}(\\(([^)]*)\\)).*(漢字五行:.{1}).*(是否爲常用字:是).*(姓名學:.{0,1})
//		Pattern p = Pattern.compile("([\\u4e00-\\u9fa5]{1})』.*(</span>){1}(\\(([^)]*)\\)).*(是否爲常用字:是)");
		Pattern p = Pattern.compile("『([\\u4e00-\\u9fa5]{1})』.*(</span>){1}(\\(([^)]*)\\)).*(是否爲常用字:.{1})");
		Matcher m = p.matcher(testPrint);
		while(m.find()){
			System.out.println(m.group(1)+m.group(4) + m.group(5));
		}
//		ReadResultFromLocal.getResultFromLocalFile("./result.txt");
	}
	public static void getLimitRecord(String filePath){
		BufferedReader br = null;
		String tempStr = "";
		int count = 0;
		int allLineOfFile = getSourceFileLineNo(filePath);
		try{
			br = new BufferedReader(new FileReader(new File(filePath)));
			while((tempStr=br.readLine())!=null){
				if((allLineOfFile - count++)<=10){
					System.out.println(tempStr);
				}
			}
		}catch(IOException e){
			System.out.println("沒有該文件或目錄");
			e.printStackTrace();
		}finally{
			try{
				br.close();
			}catch(IOException e){
				System.out.println("關閉以前關閉的流無效~!");
				e.printStackTrace();
			}
		}
	}
	
	public static int getSourceFileLineNo(String filePath){
		BufferedReader br = null ;
		String tempStr = "";
			int count = 0;
		try{
			br = new BufferedReader(new FileReader(new File(filePath)));
			while((tempStr=br.readLine())!=null){
				count ++;
			}
		}catch(IOException fnf){
			System.out.println("沒有該文件或目錄");
			fnf.printStackTrace();
			
		}finally{
			try{
				br.close();
			}catch(IOException e){
				System.out.println("關閉以前關閉的流無效~!");
				e.printStackTrace();
			}
		}
		return count;
	}

}

 

WriteResultToTxt

package generatorName;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

/** 
 * @author 蘇寶伢 E-mail:[email protected] 
 * @version 創建時間: 2018年1月25日 下午1:47:19
 */
public class WriteResultToTxt {
	public static void writeResult(String textContent){
		String resultText = textContent;
		try{
			BufferedWriter bw = new BufferedWriter(new FileWriter(new File(".\\result.txt"),true));
			bw.write(resultText,0,resultText.length());
			bw.newLine();
			bw.close();
			
		}catch(IOException e){
			
		}
		
	}
	
	public static String getSystemTime(){
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:MM:SS");//設置日期格式
		String systemTime = df.format(new Date());// new Date()爲獲取當前系統時間
		return systemTime;
	}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章