JAVA基于正则表达式的模糊替换

示例: 输入字符串:黄家驹 alias KaKuiWong(英)Koma(日)、黄伯、黑仔、四眼仔 输出字符串:黄家驹 alias KaKuiWong、Koma、黄伯、黑仔、四眼仔 代码: String inputStr = inputStr.replaceAll(“\\((.)\\)”, “、”); 有时候我们需要对括号内部的长度进行限制,如只有长度在5以内才被判断为后缀信息,若长度很长,则可能是内容信息: 代码: String inputStr = inputStr.replaceAll(“\\((.{0,5})\\)”, “、”);

对HashMap中的Value或Key进行排序

以下函数段功能,对Map结构变量tagStatMap以Value为标准进行排序,然后存放到tagInfoList结构中。 //开始对Tag进行排序    List<Map.Entry<String, Integer>> tagInfoList =            new ArrayList<Map.Entry<String, Integer>>(tagStatMap.entrySet());    Collections.sort(tagInfoList, new Comparator<Map.Entry<String, Integer>>() {           @Override   public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {                  return (o2.getValue() - o1.getValue());             //return (o1.getKey()).toString().compareTo(o2.getKey());        }    });     for (int i = 0; i < tagInfoList.size(); i++) {        String tagStr = tagInfoList.get(i).getKey();        int tagFrq = tagInfoList.get(i).getValue();        tagStaticsWriter.write(tagFrq+“<->”+tagStr+“\n”);                    }  

利用JAVA计算TFIDF和Cosine相似度-学习版本

写在前面的话,既然是学习版本,那么就不是一个好用的工程实现版本,整套代码全部使用List进行匹配效率可想而知。 【原文转自】:http://computergodzilla.blogspot.com/2013/07/how-to-calculate-tf-idf-of-document.html,修改了其中一些bug。 P.S:如果不是被迫需要语言统一,尽量不要使用此工程计算TF-IDF,计算2W条短文本,Matlab实现仅是几秒之间,此Java工程要计算良久。。半个小时?甚至更久,因此此程序作为一个学习版本,并不适用于工程实现。。工程试验版本 For beginners doing a project in text mining aches them a lot by various term like : TF-IDF COSINE SIMILARITY CLUSTERING DOCUMENT VECTORS In my earlier post I showed you guys what is Cosine Similarity. I will not … 继续阅读

Java中的格式化输出,Formatter类的介绍

转载原文链接:http://www.itzhai.com/java-notes-java-in-the-formatted-output-formatter-class-presentation.html 我们知道C语言中有printf()这样的格式化函数,类似这样的: printf(“data: [%d %f]\n”, x, y); 1、Java中也提供了类似的格式化方法:System.out.format(); Java SE5引入的format方法可以用于PrintStream或PrintWriter对象(这里不介绍了),其中也包括System.out,下面就是一个使用例子: int x = 1; double y = 3.1415926; System.out.format(“data: [%d %f]\n”, x, y); 得到如下结果: data: [1 3.141593] 2、Formatter类: 在Java中所有新的格式化功能都由java.util.Formatter类处理。可将Formatter看做一个翻译器,将你的字符串翻译成需要的结果。 构造Formatter的时候,需要向其构造器传递一些信息,告诉最终的结果将向哪里输出: public class Message{ private String username; private Formatter f; public … 继续阅读

no main manifest attribute, in *.jar

写了一个Java程序,按照以前惯用的方式打成独立可运行包、运行。。 java -jar ProcessCVS.jar 结果报出找不到主类,问题如下: [root@linux StackOverflow]# java -jar ProcessCVS.jar no main manifest attribute, in ProcessCVS.jar 莫名其妙,被迫改为自定义主类main的入口,如下: java -cp jarFileName.jar full.package.className 则正常运行。

如何用java解析CSV文件

首先看一下csv文件的规则: csv(Comma Separate Values)文件即逗号分隔符文件,它是一种文本文件,可以直接以文本打开,以逗号分隔。windows默认用excel打开。它的格式包括以下几点(它的格式最好就看excel是如何解析的。): ①每条记录占一行; ②以逗号为分隔符; ③逗号前后的空格会被忽略; ④字段中包含有逗号,该字段必须用双引号括起来; ⑤字段中包含有换行符,该字段必须用双引号括起来; ⑥字段前后包含有空格,该字段必须用双引号括起来; ⑦字段中的双引号用两个双引号表示; ⑧字段中如果有双引号,该字段必须用双引号括起来; ⑨第一条记录,可以是字段名; ⑩以上提到的逗号和双引号均为半角字符。 下面给出一种解析方法,来自:http://blog.csdn.net/studyvcmfc/article/details/6232770,原文中有一些bug,经过修改,测试ok的代码如下: 该解析算法的解析规则与excel或者wps大致相同。另外包含去掉注释的方法。 构建方法该类包含一个构建方法,参数为要读取的csv文件的文件名(包含绝对路径)。 普通方法: ① getVContent():一个得到当前行的值向量的方法。如果调用此方法前未调用readCSVNextRecord方法,则将返回Null。 ② getLineContentVector():一个得到下一行值向量的方法。如果该方法返回Null,则说明已经读到文件末尾。 ③ close():关闭流。该方法为调用该类后应该被最后调用的方法。 ④ readCSVNextRecord():该方法读取csv文件的下一行,如果该方法已经读到了文件末尾,则返回false; ⑤ readAtomString(String):该方法返回csv文件逻辑一行的第一个值,和该逻辑行第一个值后面的内容,如果该内容以逗号开始,则已经去掉了该逗号。这两个值以一个二维数组的方法返回。 ⑥ isQuoteAdjacent(String):判断一个给定字符串的引号是否两两相邻。如果两两相邻,返回真。如果该字符串不包含引号,也返回真。 ⑦ readCSVFileTitle():该方法返回csv文件中的第一行——该行不以#号开始(包括正常解析后的#号),且该行不为空 解析接口代码: import java.io.BufferedReader;       import java.io.FileNotFoundException;       import java.io.FileReader;       import java.io.IOException;    … 继续阅读

查找多个词典中的公共词典

【场景】:现在有4个词典: 1. wordmap.txt:训练语料的词典(由LDA-工具生成,这倒是一个很偷懒的方法); 2. CWembeddings-scaled.EMBEDDING_SIZE=50.txt,由Turian-ACL2010提供的50维词向量; 3. HLBL-embeddings-scaled.EMBEDDING_SIZE=50.,由Turian-ACL2010提供的50维词向量; 4. Senna-embeddings-words.lst,由Senna系统提供的50维词向量; 【需求】: 1. comWord.dic 要找出其中的公共词,生成词典; 2. 按照词典顺序输出对应的3个词向量保存到各自的文件中;Senna_embeddings.vec CW_embeddings.vec HLBL_embeddings.vec 3. 希望把有词向量的放到前面,没有词向量的放到后面。训练数据中的所有词都做保留。 【代码如下】: import java.io.BufferedReader;    import java.io.BufferedWriter;    import java.io.File;    import java.io.FileInputStream;    import java.io.FileOutputStream;    import java.io.IOException;    import java.io.InputStreamReader;    import java.io.OutputStreamWriter;    import java.util.ArrayList;    import java.util.HashMap;    … 继续阅读

如何在java代码里添加简易版注册信息

简单注册码一般都基于主机服务器CPU,网卡,及磁盘等信息进行加密转码。本文基于此给出一个简单的示例: import java.net.InetAddress;    import java.net.NetworkInterface;    import java.net.UnknownHostException;       public class testjacoxu {        public static void SmsBaseLoadConfig(){            String registerStr = config.getValue(“registerCode”);            long registerCode = Long.parseLong(extractNumberCharacter(registerStr));            if (!register()) {                log.error(“======= Register failure, please contact with developer! ========”);                log.error(“============ Author: Jacob Xu, Email:jacoxu@msn.com! ============”);                long tmpCode = 1987;                try {                    tmpCode = Long.parseLong(getMACAddress(InetAddress.getLocalHost()), 16);                } catch (NumberFormatException e) {                    tmpCode = 1987;                } catch (Exception e) {                    tmpCode = 1987;                }                log.error(“===Sent the number:”+tmpCode+“ to E-mail===”);    … 继续阅读

simpledateformat to long 24小时制问题

进行基于时间的条件查询时,发现一个bug,修复了好久,才发现dateformat转long型存在一个很严重的进制问题。 如果是12进制parse之后,12-24点之间的时间字符串会被自动转成0-12点之间所对应的long型,直入正题,看代码陷阱(小写hh是12进制,大写HH是24进制): java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”,java.util.Locale.US);    java.util.Date startTime = sdf.parse(“2011-08-07 12:31:56″);    long ltime = startTime.getTime();    System.out.println(“Test1:”+ltime/1000);    sdf = new java.text.SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”,java.util.Locale.US);    startTime = sdf.parse(“2011-08-07 12:31:56″);    ltime = startTime.getTime();    System.out.println(“Test2:”+ltime/1000);   输出结果则很清晰,截然不同: Test1:1312648316   Test2:1312691516     关于Java 各种格式的时间解析问题,参看:http://jacoxu.com/?p=451