前陣子借了一本相關術士的書籍,裏面其中有一章是介紹關於取名的知識。江湖術士取名其中會根據名字的筆畫通過一定的規則來計算,計算其對應的總格、天格、人格、地格以及外格,從而判斷該名對個人運勢的影響是好或壞(人定勝天哈)。這就是名字所謂的數格。
既然如此,剛好我家二寶準備來跟我見面了。那我何不把所有文字通過遍歷、組合,取其筆畫數(對應康字典上的繁體字筆畫),通過上述所說的規則計算後,符合數格數爲吉的文字全部記錄下來,然後再人爲篩選自己所喜歡的文字爲最終名字(因爲計算出來的名字很多都是怪異、滑稽的)...
嗯,技術改變命運的時刻到了。
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> 辭 海 </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;
}
}