前阵子借了一本相关术士的书籍,里面其中有一章是介绍关于取名的知识。江湖术士取名其中会根据名字的笔画通过一定的规则来计算,计算其对应的总格、天格、人格、地格以及外格,从而判断该名对个人运势的影响是好或坏(人定胜天哈)。这就是名字所谓的数格。
既然如此,刚好我家二宝准备来跟我见面了。那我何不把所有文字通过遍历、组合,取其笔画数(对应康字典上的繁体字笔画),通过上述所说的规则计算后,符合数格数为吉的文字全部记录下来,然后再人为筛选自己所喜欢的文字为最终名字(因为计算出来的名字很多都是怪异、滑稽的)...
嗯,技术改变命运的时刻到了。
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> 辞 海 </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;
}
}