取名

前阵子借了一本相关术士的书籍,里面其中有一章是介绍关于取名的知识。江湖术士取名其中会根据名字的笔画通过一定的规则来计算,计算其对应的总格、天格、人格、地格以及外格,从而判断该名对个人运势的影响是好或坏(人定胜天哈)。这就是名字所谓的数格。

既然如此,刚好我家二宝准备来跟我见面了。那我何不把所有文字通过遍历、组合,取其笔画数(对应康字典上的繁体字笔画),通过上述所说的规则计算后,符合数格数为吉的文字全部记录下来,然后再人为筛选自己所喜欢的文字为最终名字(因为计算出来的名字很多都是怪异、滑稽的)...

嗯,技术改变命运的时刻到了。

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:by.su@qq.com 
 * @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:by.su@qq.com 
 * @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:by.su@qq.com 
 * @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:by.su@qq.com 
 * @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:by.su@qq.com 
 * @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:by.su@qq.com 
 * @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:by.su@qq.com 
 * @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:by.su@qq.com 
 * @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:by.su@qq.com 
 * @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:by.su@qq.com 
 * @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:by.su@qq.com 
 * @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:by.su@qq.com 
 * @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:by.su@qq.com 
 * @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:by.su@qq.com 
 * @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:by.su@qq.com 
 * @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:by.su@qq.com 
 * @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:by.su@qq.com 
 * @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;
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值