遇到的问题
一个日志文件中account_system.log_bak的数据,简化后的内容如下:
"compId":1234,"compName":"深圳市xx有限公司"
"compId":12345,"compName":"深圳市xx2有限公司"
"compId":12346,"compName":"深圳市xx3有限公司"
"compId":12347,"compName":"深圳市xx4有限公司"
需要把这个文本中的 "compId":和,"compName 中间的数字 1234 找出来。
很明显,存在正则匹配。
但是,习惯用java处理字符串了。
第1种方法:
先截头,再截尾。中间的 就是 数字。
//"compId":1234,"compName":"深圳市xx有限公司"
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("E:\\account_system.log_bak");
BufferedReader bf = new BufferedReader(fr);
String str="";
// 按行读取字符串
while ((str = ()) != null) {
getNum(str);
}
();
}
//"compId":2788,
public static int getNum(String str){
if(str==null){
return 0;
}
//先截头,再截尾
String dest="\"compId\":";
int index=(dest);
if(index!=-1){
String tail= (index+());
//(tail);
int commaIndex=(",");
String destNum = (0,commaIndex);
(destNum);
}
return 0;
}
第2种方法:
用正则匹配,不太会写,参考网上的资料。
//"compId":2788,
public static int getNum(String str){
if(str==null){
return 0;
}
String rgex = "\"compId\":(.*?),\"compName\"";
String str2=(str, rgex);
(str2);
return 0;
}
public class DealStrSub {
/**
* 正则表达式匹配两个指定字符串中间的内容
*/
public static List<String> getSubUtil(String soap, String rgex) {
List<String> list = new ArrayList<String>();
Pattern pattern = (rgex);// 匹配的模式
Matcher m = (soap);
while (()) {
((1));
}
return list;
}
/**
* 返回单个字符串,若匹配到多个的话就返回第一个,方法与getSubUtil一样
*
* @param soap
* @param rgex
* @return
*/
public static String getSubUtilSimple(String soap, String rgex) {
Pattern pattern = (rgex);// 匹配的模式
Matcher m = (soap);
while (()) {
return (1);
}
return "";
}
/**
* 测试
*
* @param args
*/
public static void main(String[] args) {
String str = "abc3443abcfgjhgabcgfjabc";
String rgex = "abc(.*?)abc";
(getSubUtil(str, rgex));
(getSubUtilSimple(str, rgex));
}
}
以上代码,正确性没问题。
自己有修改优化,单独维护。
参考资料:
java 正则表达式获取指定两个字符串之间内容
/u013144287/article/details/72845247
Java中文本文件的读取(按行读取)
/milletguo/article/details/80144290