- 浏览: 157301 次
- 来自: ...
文章分类
- 全部博客 (110)
- 网络 (3)
- window (1)
- eclipse (2)
- mysql (3)
- java (43)
- spring (2)
- memcahe (4)
- kestrel (1)
- linux (19)
- maven (1)
- 总结 (1)
- ActiveMQ (1)
- 线程 (6)
- nio (7)
- java pool (1)
- IO (1)
- 架构 (1)
- Hadoop (1)
- Storm (1)
- zookeeper (3)
- 工作进程 (1)
- epoll (3)
- nginx (4)
- uml (1)
- 分布式 (1)
- RMI (4)
- redis (1)
- shell (4)
- 黄金文档 (1)
- office (2)
- linux_setup (1)
- visio (1)
- BIOS (1)
- 回调 (1)
- jvm (1)
- resin (1)
- ssd (0)
- xmpp (1)
最新评论
-
qxjandyc:
hjjjjjjjjjjjjjjjjjjjjjj
(emoji表情) unicode5与unicode6互换 -
一个人旅行:
写的不错哦
(emoji表情) unicode5与unicode6互换
JAVA匹配字符串 处理
- 博客分类:
- java
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.oro.text.regex.PatternCompiler;
import org.apache.oro.text.regex.PatternMatcher;
import org.apache.oro.text.regex.Perl5Compiler;
import org.apache.oro.text.regex.Perl5Matcher;
import org.apache.oro.text.regex.Perl5Substitution;
import org.apache.oro.text.regex.Util;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;
import sun.io.*;
public class ConvertMsgContent {
private static Log log = LogFactory.getLog(ConvertMsgContent.class);
public static String formatAndSeriesTag(String content) {
return seriesTag(format(content));
}
public static List<ContentFragment> format(String content) {
// System.out.println(content);
if (content == null) return null;
List<ContentFragment> ret = new Stack<ContentFragment>();
StringBuilder thisElement = new StringBuilder();
StringBuilder oldContentBuilder = new StringBuilder(content);
int stats = 0;//0 标签外,1 <,2</...,3<...,4<.../
int tagDeep = 0;//标签深度
String tagName = "";
boolean tagNameFound = false;
for (int i = 0, j = oldContentBuilder.length(); i < j; i++) {
boolean closeTag = false;
char ch = oldContentBuilder.charAt(i);
if (ch == '<') { //标签开始
if (stats == 0) {
if (tagDeep == 0 && thisElement.length() > 0) {
ContentFragment instance = new ContentFragment(ContentFragment.TypeText, thisElement.toString());
ret.add(instance);
thisElement.delete(0, thisElement.length());
}
stats = 1;
tagNameFound = false;
tagName = "";
}
// thisElement.append(ch);
} else if (ch == ' ') {
if (stats == 3) tagNameFound = true;
// thisElement.append(ch);
} else if (ch == '/') { //标签结束
if (stats == 1) stats = 2;
else if (stats == 3) stats = 4;
// thisElement.append(ch);
} else if (ch == '>') {
if (stats == 2) {
tagDeep--;
stats = 0;
if (tagDeep == 0) closeTag = true;
} else if (stats == 3) {
tagDeep++;
if ("img".equalsIgnoreCase(tagName) || "meta".equalsIgnoreCase(tagName))
tagDeep--;//图片标签和meta标签可以不闭合
stats = 0;
if (tagDeep == 0) closeTag = true;
} else if (stats == 4) {
stats = 0;
if (tagDeep == 0) closeTag = true;
}
// thisElement.append(ch);
} else {
if (stats == 1) {
stats = 3;
} else if (stats == 4) stats = 3;
if (tagNameFound == false) tagName = tagName + ch;
// thisElement.append(ch);
}
thisElement.append(ch);
if (closeTag) {
ContentFragment instance = new ContentFragment(ContentFragment.TypeUndefine, thisElement.toString());
ret.add(instance);
thisElement.delete(0, thisElement.length());
analysisTag(instance);
}
}
if (thisElement.length() > 0) {
ContentFragment instance = new ContentFragment(ContentFragment.TypeText, deleteHtmlTag(thisElement.toString()));
ret.add(instance);
thisElement.delete(0, thisElement.length());
}
return ret;
}
public static String seriesTag(List<ContentFragment> tagList) {
StringBuilder stringBuilder = new StringBuilder();
for (ContentFragment tag : tagList) {
switch (tag.getType()) {
case ContentFragment.TypeText:
stringBuilder.append(tag.getAll());
break;
case ContentFragment.TypeAt:
stringBuilder.append('<').append(createStringJson("at", "name", tag.getExt1())).append('>');
// stringBuilder.append("<{\"data\":{\"name\":\"").append(tag.getExt1()).append("\"},\"type\":\"at\"}>");
break;
case ContentFragment.TypeFace:
stringBuilder.append('<').append(createStringJson("em", "em", tag.getExt1())).append('>');
// stringBuilder.append("<{\"data\":{\"em\":\"").append(tag.getExt1()).append("\"},\"type\":\"em\"}>");
break;
case ContentFragment.TypeHuati:
stringBuilder.append('<').append(createStringJson("topic", "topic", tag.getExt1())).append('>');
// stringBuilder.append("<{\"data\":{\"topic\":\"").append(tag.getExt1()).append("\"},\"type\":\"topic\"}>");
break;
case ContentFragment.TypeUrl:
stringBuilder.append('<').append(createStringJson("url", "short", tag.getExt1(), "long", tag.getExt2())).append('>');
// stringBuilder.append("<{\"data\":{\"short\":\"").append(tag.getExt1()).append("\",\"long\":\"").append(tag.getExt2()).append("\"},\"type\":\"url\"}>");
break;
case ContentFragment.TypePic:
stringBuilder.append('<').append(createStringJson("pic", "w", tag.getExt1(), "h", tag.getExt2(), "url", tag.getExt3())).append('>');
// stringBuilder.append("<{\"data\":{\"w\":\"").append(tag.getExt1()).append("\",\"h\":\"").append(tag.getExt2()).append("\",\"url\":\"").append(tag.getExt3()).append("\"},\"type\":\"pic\"}>");
break;
case ContentFragment.TypeUndefine:
stringBuilder.append(tag.getExt1());
break;
}
}
return stringBuilder.toString();
}
private static String createStringJson(String type, Object... keyValues) {
JSONObject ret = new JSONObject();
try {
JSONObject dataObject = new JSONObject();
for (int i = 0; i + 2 <= keyValues.length; i += 2) {
dataObject.put(keyValues[i].toString(), keyValues[i + 1]);
}
ret.put("type", type);
ret.put("data", dataObject);
} catch (JSONException e) {
log.error("createStringJson", e);
}
return ret.toString();
}
private static void analysisTag(ContentFragment instance) {
if (instance.type == ContentFragment.TypeUndefine) {
int pos = 0;
String displayContent = deleteHtmlTag(instance.getAll()).trim();
if (displayContent.startsWith("@")) {
instance.setType(ContentFragment.TypeAt);
instance.setExt1(displayContent.substring(1));
} else if (displayContent.startsWith("#") && displayContent.endsWith("#")) {
instance.setType(ContentFragment.TypeHuati);
instance.setExt1(displayContent.substring(1, displayContent.length() - 1));
} else if (displayContent.startsWith("http://")) {
instance.setType(ContentFragment.TypeUrl);
instance.setExt1(displayContent);
String originUrl = getUrlTitle(instance.getAll());
if (originUrl == null || originUrl.length() == 0) originUrl = displayContent;
instance.setExt2(originUrl);
} else if (displayContent == null || displayContent.length() == 0) {
if (instance.getAll().contains("class") && instance.getAll().contains("title=\"[")) {
instance.setType(ContentFragment.TypeFace);
instance.setExt1(getFaceTitle(instance.getAll()));
} else if (instance.getAll().contains("meta")) {
instance.setType(ContentFragment.TypePic);
Map<String, String> temp = getRetwitterPic(instance.getAll());
instance.setExt1(temp.get("w"));
instance.setExt2(temp.get("h"));
instance.setExt3(temp.get("url"));
}
} else if (displayContent.length() < 4 && instance.getAll().contains("pic_icon")) {
instance.setType(ContentFragment.TypePic_);
} else {
instance.setExt1(deleteHtmlTag(instance.getAll()));
}
}
}
private static Map<String, String> getRetwitterPic(String content) {
Map<String, String> result = new HashMap<String, String>();
String w = "", h = "", url = "";
int pos = content.indexOf("url=\"");
if (pos > 0) {
String ret = content.substring(pos + 5);
pos = ret.indexOf("\"");
if (pos > 0) url = ret.substring(0, pos);
}
pos = content.indexOf(" h=\"");
if (pos > 0) {
String ret = content.substring(pos + 4);
pos = ret.indexOf("\"");
if (pos > 0) h = ret.substring(0, pos);
}
pos = content.indexOf(" w=\"");
if (pos > 0) {
String ret = content.substring(pos + 4);
pos = ret.indexOf("\"");
if (pos > 0) w = ret.substring(0, pos);
}
result.put("w", w);
result.put("h", h);
result.put("url", url);
return result;
}
private static String getUrlTitle(String all) {
if (all == null) return null;
int pos = all.indexOf("title=\"http://");
if (pos != -1) {
all = all.substring(pos + 7);
pos = all.indexOf('"');
if (pos != -1) {
return all.substring(0, pos);
}
}
return null;
}
private static String getFaceTitle(String all) {
if (all == null) return null;
int pos = all.indexOf("title=\"");
if (pos != -1) {
all = all.substring(pos + 7);
pos = all.indexOf('"');
if (pos != -1) {
return all.substring(0, pos);
}
}
return null;
}
private static String getAtName(String content) {
if (content == null) return "";
if (content.startsWith("@")) content = content.substring(1);
return content;
}
private static String getHuati(String content) {
if (content == null) return "";
if (content.startsWith("#") && content.endsWith("#")) content = content.substring(1, content.length() - 1);
return content;
}
public static String deleteHtmlTag(String content) {
if (content == null) return "";
int i = 0, j = content.length();
boolean inTag = false;
StringBuilder stringBuilder = new StringBuilder();
for (; i < j; i++) {
char ch = content.charAt(i);
if (inTag == false) {
if (ch == '<') inTag = true;
else stringBuilder.append(ch);
} else if (ch == '>') {
inTag = false;
}
}
return stringBuilder.toString();
}
public static class ContentFragment {
public final static int TypeText = 0;
public final static int TypeHuati = 1;
public final static int TypeAt = 2;
public final static int TypeUrl = 3;
public final static int TypeFace = 4;
public final static int TypePic = 5;
public final static int TypePic_ = 6;
public final static int TypeUndefine = 10;
private int type = TypeText;//0 纯文本内容;1 话题;2 @名字;3 url;4 表情;5 图片
private String all;
private String ext1;
private String ext2;
private String ext3;
private ContentFragment(int type, String all) {
this.type = type;
this.all = all;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getAll() {
return all;
}
public void setAll(String all) {
this.all = all;
}
public String getExt1() {
return ext1;
}
public void setExt1(String ext1) {
this.ext1 = ext1;
}
public String getExt2() {
return ext2;
}
public void setExt2(String ext2) {
this.ext2 = ext2;
}
public String getExt3() {
return ext3;
}
public void setExt3(String ext3) {
this.ext3 = ext3;
}
@Override
public String toString() {
return "ContentFragment{" +
"type=" + type +
", all='" + all + '\'' +
", ext1='" + ext1 + '\'' +
", ext2='" + ext2 + '\'' +
", ext3='" + ext3 + '\'' +
'}';
}
public static String aaa(String con,String reg,String replace) {
if(null == con){
return "";
}
String ret = con;
String input = con;
try {
PatternCompiler compiler = new Perl5Compiler();
PatternMatcher matcher = null;
org.apache.oro.text.regex.Pattern pattern = null;
pattern = compiler.compile(reg,Perl5Compiler.CASE_INSENSITIVE_MASK);
matcher = new Perl5Matcher();
if (matcher.contains(input, pattern)) {
Perl5Substitution sub = new Perl5Substitution(replace,Perl5Substitution.INTERPOLATE_ALL);
ret = Util.substitute(matcher, pattern, sub, input, Util.SUBSTITUTE_ALL);
}
} catch (Exception e) {
e.printStackTrace();
return ret ;
}
return ret;
}
public static String delStatusByReg(String con,String reg,String replace) {
if(null == con){
return "";
}
String ret = con;
String input = con;
try {
PatternCompiler compiler = null;
PatternMatcher matcher = null;
Perl5Substitution sub = null;
org.apache.oro.text.regex.Pattern pattern = null;
compiler = new Perl5Compiler();
pattern = compiler.compile(reg,Perl5Compiler.CASE_INSENSITIVE_MASK);
matcher = new Perl5Matcher();
if (matcher.contains(input, pattern)) {
sub = new Perl5Substitution(replace,Perl5Substitution.INTERPOLATE_ALL);
ret = Util.substitute(matcher, pattern, sub, input, Util.SUBSTITUTE_ALL);
}
} catch (Exception e) {
e.printStackTrace();
return ret ;
}
return ret;
}
public static String regStatusTopic = "<a href=\".*?\" target=\"_blank\">#(.*?)#</a>";
//@
public static String regStatusAT = "<b class=\"nm\"><a href=\".*?\" target=\"_blank\" data-content='{\"type\":\"nick\",\"nick\":\".*?\"}' title=\".*?\"><i class=\"at\">@</i>(.*?)</a></b>";
//url
public static String regStatusURL = "<a href=\".*?\" target=\"_blank\" data-content='{\"type\":\"url\"}' title=\"(.*?)\">(.*?)</a> <a href=\".*?\" target=\"_blank\" data-content='{\"type\":\"url\"}' title=\"http://blog.s135.com/category/19/\">http://t.itc.cn/rFLLE</a>";
//表情
public static String regStatusEm = "<i class=\".*?\" title=\"(.*?)\"></i>";
// public static String regStatusTopic = "<\\{\"data\":\\{\"topic\":\"(.*?)\"\\},\"type\":\"topic\"\\}>";
// //@
// public static String regStatusAT = "<\\{\"data\":\\{\"name\":\"(.*?)\"\\},\"type\":\"at\"\\}>";
// //url
// public static String regStatusURL = "<\\{\"data\":\\{\"short\":\"(http://.*?)\",\"long\":\"(http://.*?)\"\\},\"type\":\"url\"\\}>";
// //表情
// public static String regStatusEm = "<\\{\"data\":\\{\"em\":\"(\\[.*?\\])\"\\},\"type\":\"em\"\\}>";
//转发带图
//public static String regStatusImg = "<\\{\"data\":\\{(\"w\":\"[\\d]*\",\"h\":\"[\\d]*\",)?\"url\":\"(http://.*?)\"\\},\"type\":\"pic\"\\}>";
//转发带图(中间内容部分)
public static String regStatusImg = "<\\{\"data\":\\{(.*?)\"url\":\"(http://.*?)\"(.*?)\\},\"type\":\"pic\"\\}>";
//转发带图(Ext部
public static String regStatusExtImg = "\\{\"last_twitter_id\":[\\d]*,\"richfeed_2_url\":\"(http://.*?)\",(.*?)\\}";
//换行
public static String regChangeLine = "<\\{\"data\":\\{\\},\"type\":\"nl\"\\}>";
public static String replaceTopic = "<{\"data\":{\"topic\":\"$1\"},\"type\":\"topic\"}>";
public static String replaceAT = "<{\"data\":{\"name\":\"$1\"},\"type\":\"at\"}>";
public static String replaceURL = "<{\"data\":{\"short\":\"$2\",\"long\":\"$1\"},\"type\":\"url\"}>";
public static String replaceEm = "<{\"data\":{\"em\":\"$1\"},\"type\":\"em\"}>";
// public static String replaceTopic = "#$1#";
// public static String replaceAT = "@$1 ";
// public static String replaceURL = "$2";
// public static String replaceEm = "[$1]";
public static void main(String[] args) throws UnsupportedEncodingException, MalformedInputException{
String con = "da <a href=\"/ht/daaa\" target=\"_blank\">#daaa#</a>这个世界 <b class=\"nm\"><a href=\"/n/%E9%9D%92%E8%9B%99%E7%89%9B%E4%BB%94\" target=\"_blank\" data-content='{\"type\":\"nick\",\"nick\":\"青蛙牛仔\"}' title=\"青蛙牛仔\"><i class=\"at\">@</i>青蛙牛仔</a></b> 内容长又长 <a href=\"http://t.itc.cn/redKt\" target=\"_blank\" data-content='{\"type\":\"url\"}' title=\"http://blog.s135.com/category/19/\">http://t.itc.cn/redKt</a> <a href=\"http://t.itc.cn/rFLLE\" target=\"_blank\" data-content='{\"type\":\"url\"}' title=\"http://blog.s135.com/category/19/\">http://t.itc.cn/rFLLE</a> 出现一些干部娈童案,我转评了,有网友说,国外神职人员也有啊.是的,每一个群体中都有,但与恶劣比例最大的,全世界只有一个准神职组织,而这个组织可能由你我供养着,我们要使它纯洁,就得多批评,使其阳光公开,使其受到真正的监督.外国的媒体会报道外国神职人员,我们得有我们的责任与权利意识.<i class=\"x x40\" title=\"[给力]\"></i><i class=\"x x185\" title=\"[不懂]\"></i>";
// String con = "da <{\"data\":{\"topic\":\"daaa\"},\"type\":\"topic\"}>这个世界 <{\"data\":{\"name\":\"青蛙牛仔\"},\"type\":\"at\"}> 内容长又长 <{\"data\":{\"short\":\"http://t.itc.cn/redKt\",\"long\":\"http://blog.s135.com/category/19/\"},\"type\":\"url\"}> <{\"data\":{\"short\":\"http://t.itc.cn/rFLLE\",\"long\":\"http://blog.s135.com/category/19/\"},\"type\":\"url\"}> 出现一些干部娈童案,我转评了,有网友说,国外神职人员也有啊.是的,每一个群体中都有,但与恶劣比例最大的,全世界只有一个准神职组织,而这个组织可能由你我供养着,我们要使它纯洁,就得多批评,使其阳光公开,使其受到真正的监督.外国的媒体会报道外国神职人员,我们得有我们的责任与权利意识.<{\"data\":{\"em\":\"[给力]\"},\"type\":\"表情\"}><{\"data\":{\"em\":\"[不懂]\"},\"type\":\"em\"}>";
String ret = null;
long start = System.currentTimeMillis();
for(int i=0;i<100000;i++){
// ret = ConvertMsgContent.formatAndSeriesTag(con);
// ret = con;
con = delStatusByReg(con,regStatusTopic,replaceTopic);
//@处理成@xxx
con = delStatusByReg(con,regStatusAT,replaceAT);
// //url处理成url
// con = delStatusByReg(con,regStatusURL,replaceURL);
// //表情处理成[xx]
// con = delStatusByReg(con,regStatusEm,replaceEm);
// //换行或空格( )处理成空格
// con = delStatusByReg(con,regChangeLine," ");
// //转发带图处理成[url]
// con = delStatusByReg(con,regStatusImg,"[$2]");
}
ret = con;
long end = System.currentTimeMillis();
System.out.println("ret:"+ret);
System.out.println("耗时:"+(end-start)+"毫秒");
// String str = "¥";
// char[] arr = str.toCharArray();
// System.out.println(arr.length);
// System.out.println(arr[0]);
// System.out.println((int)str.toCharArray()[0]);
//"iso-8859-1"
// byte[] bs = str.getBytes();
// System.out.println(bs);
// for(int i=0;i<bs.length;i++){
// System.out.println(bs[i]);
// System.out.println(Integer.toHexString(bs[i]));
// System.out.println(Integer.toOctalString(bs[i]));
// System.out.println(Integer.toBinaryString(bs[i]));
// }
// String encoding ="gb2312";
// byte b[] = {(byte)'\u00c4',(byte)'\u00e3'};
// ByteToCharConverter converter = ByteToCharConverter.getConverter(encoding);
// char c[] = converter.convertAll(b);
// for (int i =0; i < c.length; i++) {
// System.out.println(Integer.toHexString(c[i]));
// }
}
}
}
发表评论
-
java final关键字
2012-10-21 21:20 1015Java中的final关键字通常的指的是“这是无法改变的”。它 ... -
Java:List中的toArray()的使用方法
2012-10-16 17:15 1036http://webservices.ctocio.com.c ... -
jvm 参数设置 -D
2012-10-16 14:06 9161、log4j 配置文件 -Dlog4j.configurat ... -
Java核心技术(第8版) – 读书笔记
2012-09-03 15:15 766http://www.coder4.com/archives/ ... -
线程123总结
2012-09-02 22:34 747线程同步的真实意思,其实是“排队”:几个线程之间要排队,一个一 ... -
Arraylist与linkedlist的区别
2012-08-31 16:44 728List: 有顺序的,元素可以重复 遍历:for 迭代 排 ... -
Java RMI之HelloWorld篇
2012-08-29 11:53 560http://www.cnblogs.com/ninahan0 ... -
Comparator和Comparable在排序中 区别
2012-08-21 09:40 714当需要排序的集合或数组不是单纯的数字类型的时候,通常可以使用C ... -
Spring Bean相关的接口、aware接口、FactoryBean
2012-08-02 14:57 36901、 package spring.beansandcon ... -
关系 UML 说明
2012-08-01 22:56 747关联是类之间的一种关系,例如老师教学生,老公和老婆,水壶装水等 ... -
replace和replaceAll 区别
2012-08-01 14:59 780replace和replaceAll是JAVA中常用的替换字符 ... -
JAVA ANNOTATION详解
2012-08-01 14:56 713http://www.cnblogs.com/phoebus0 ... -
Java中的Enum用法介绍
2012-07-27 09:39 951http://blog.sina.com.cn/s/blog_ ... -
获取本地ip
2012-07-26 09:09 860/** * @Title: getLocalIp ... -
动态代理
2012-07-25 10:29 684http://blog.csdn.net/cz_hyf/art ... -
NIO揭秘-1
2012-07-24 11:15 684http://my.oschina.net/zhangya/b ... -
FileChannel类的简单用法
2012-07-23 20:12 857http://blog.163.com/yf_198407/b ... -
JDK5.0 新特性
2012-07-23 17:30 7201.AutoBoxing 原来int是非Object,在JDK ... -
java jdk5 新特性 Annotation(注释)
2012-07-23 17:29 795http://www.iteye.com/topic/1653 ... -
java jdk5 新特性 可变参数
2012-07-23 17:28 667java jdk5 的新特性:可变参数 Java代码 ...
相关推荐
Java正则表达式在字符串处理和模式匹配中扮演着重要角色。为了帮助准备面试的你更好地掌握Java正则表达式的应用,本文精选了20道复杂的面试题,并提供了详细的解析。从贪婪匹配和非贪婪匹配的概念到匹配数字、字母、...
SQL Server查询中的特殊字符处理 我们都知道SQL Server查询过程中,单引号“'”是特殊字符,所以在查询的时候要转换成双单引号“''”。 但这只是特殊字符的一个,在实际项目中,发现对于like操作还有以下特殊字符:...
正好遇到一个需求需要将字符串中特定的字符全部提取出来,这个如果是按常规的字符串处理的话非常的繁琐。于是想到用正则表达式来完成。项目需求是这样的:需要提取车牌号中最后一个数字,比如说:苏A7865提取5,苏A...
正则表达式异常强大,一直理解不深,用的也不深,这次项目中尝试,体会到了它的强大之处...字符串查找,匹配,替换,正则无不能做,特别是灵活的运用子串匹配得到的变量值$1,$2,再进行二次处理能够达到很巧妙的效果。
如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一个用来搜索匹配字符串的模式。 许多语言,包括Perl、PHP、Python、JavaScript和JScript,都支持用正则表达式处理...
1、使用Document和Xpath...3、使用Xpath语法进行对字符串的做处理 4、富文本的字符串保存做二次的编辑 需求: 截取<p></p>里面的文字,并且找对应的文字进行匹配,如匹配上在p标签上增加一个id,数值是随机生成的
由于正则表达式定了一些特殊字符,而有时候需要对这些特殊字符进行匹配的话就需要进行转义了,下面这篇文章主要给大家介绍了Java正则表达式处理特殊字符转义的方法,需要的朋友可以参考借鉴,下面来一起看看吧。
手机号,银行卡等脱敏显示 把部分字符*号处理工具类 正则匹配
未优化复杂场景:在大量字符串处理时,如果字符串长度较大,可能有进一步优化空间,例如减少字符串复制次数。 调用方法描述: camelToUnderscore方法接收一个驼峰命名的字符串作为参数,并返回相应下划线命名的...
java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类...
什么是模糊字符串匹配 Fuzzy-string-match是用于ruby的模糊字符串匹配库。... 纯Ruby版本可以处理ASCII和UTF8字符串。 (而且很慢) 本机版本只能使用ASCII字符串。 (但是很快) 样例代码 本机版本 req
如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一个用来搜索匹配字符串的模式。 许多语言,包括Perl、PHP、Python、JavaScript和JScript,都支持用正则表达式处理...
phasmida 是一个字符串的处理工具,旨在通过一段简单的链式表达式描述并匹配出字符串中某些存在的特征,作为程序员的你应该能想到另外一个的东西,正则表达式。工作中有项目需要大量针对字符串做match,识别其中的...
一、概述 正则表达式是Java处理字符串、文本的重要工具。 Java对正则表达式的处理集中在以下两... java.util.regex.Pattern 匹配类:用模式匹配一个字符串所表达的抽象结果。 (新版的Java Doc有解释。)
ArrayString.java 字符串数组 assignTwoDime.java 为二维数组赋值 getMaxElem.java 获取数组中的最大元素 incCapicity.java 演示StingBuffer的容量增长 SortDemo.java 排序示例 travelTwoDime.java 遍历二维...
该源码资源的目标是提供一组功能丰富、高效可靠的字符串操作方法,以便开发者可以轻松地进行字符串处理。它的设计目标是简单易用、可扩展性强,并且能够处理各种复杂的字符串情况。 该源码资源会包含以下示例代码,...
如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一个用来搜索匹配字符串的模式。 许多语言,包括Perl、PHP、Python、JavaScript和JScript,都支持用正则表达式处理...
上述代码是一个Java小工具,名为 "FileSearchAndReplace",其作用是允许用户指定一个目录路径,然后在该目录下递归搜索所有文件,针对每个文件查找用户提供的搜索字符串,并将匹配的字符串替换为用户提供的替换字符...
string类是Java中的一种数据类型,用于表示文本字符串。它是不可变的,也就是说一旦创建...字符串类在Java中广泛应用于各种场景,如文本处理、字符串匹配和格式化等。它是一种非常重要的数据类型,值得深入学习和掌握。
说某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件。 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述...