- 浏览: 1236017 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (242)
- java (58)
- netty (14)
- javascript (21)
- commons (13)
- 读书笔记 (5)
- java测试 (6)
- database (5)
- struts2 (8)
- hibernate (6)
- english (27)
- spring (10)
- 生活 (4)
- 多线程 (4)
- 正则表达式 (1)
- 杂项 (1)
- maven (4)
- 数据库 (10)
- 学习笔记 (1)
- mongodb (1)
- 百度bcs (4)
- 云推送javasdk (2)
- webservice (3)
- IllegalAnnotationException: Two classes have the same XML type name (0)
- drools (3)
- freemarker (3)
- tomcat (1)
- html5 (2)
- mq (11)
- fastjson (3)
- 小算法 (2)
最新评论
-
longxitian:
https://www.cnblogs.com/jeffen/ ...
万恶的Mybatis的EnumTypeHandler -
asialee:
ddnzero 写道博主请问FileUtils这个类是哪个包的 ...
使用mockftpserver进行ftp测试 -
ddnzero:
博主请问FileUtils这个类是哪个包的?还是自己的呢?能放 ...
使用mockftpserver进行ftp测试 -
yizishou:
为什么会intMap.get("bbb") ...
浅谈System.identityHashCode -
liguanqun811:
感觉LogManager打开了所有的LogSegment(文件 ...
jafka学习之LogManager
我们经常在代码中使用String的replace方法和replaceAll方法,但JDK的类调用比较复杂,下面我们看看jive中的实现:
理解了上面的代码,再理解忽略大小写的代码就容易多了。
主要是将要替换的串,和源字符转为小写,替换为目标字符,思路很上面的差不多。
还有一些经常使用的一些比如HTML、XML一些特殊字符的一些过滤:
方法看起来还是比较简单的。
那我们在看看关于XML替换的,在XML中&也也是一个特殊字符,
方法差不多.
其实在实际编程过程中我们经常使用commones-utils.jar里面的StringUtil,或者Spring里面带的一些Util方法,或者社区里面一些爱好者写的Util类,只要大概知道他们是怎么实现的,用他们的还是可以节省很多时间。
public static final String replace(String line, String oldString, String newString) { if (line == null) { return null; } int i = 0; if ((i = line.indexOf(oldString, i)) >= 0) { char[] line2 = line.toCharArray(); char[] newString2 = newString.toCharArray(); int oLength = oldString.length(); StringBuffer buf = new StringBuffer(line2.length); buf.append(line2, 0, i).append(newString2); //拷贝串开始到目标字符出现的字符,再加上要替换的字符 i += oLength; int j = i; //查找后面出现的原字符 while ((i = line.indexOf(oldString, i)) > 0) { //拷贝两次出现的中间的字符,再加上要替换的字符 buf.append(line2, j, i - j).append(newString2); i += oLength; j = i; } //把最后没有替换的字符加到后面 buf.append(line2, j, line2.length - j); return buf.toString(); } return line; }
理解了上面的代码,再理解忽略大小写的代码就容易多了。
private static String replaceIngoreCase(String line,String oldString,String newString){ if(line == null){ return null; } int i = 0; String lcLine = line.toLowerCase(); String lcOldString = oldString.toLowerCase(); if((i = lcLine.indexOf(lcOldString,i)) != -1){ char[] line2 = line.toCharArray(); char[] newString2 = newString.toCharArray(); StringBuffer buf = new StringBuffer(line2.length); int oLength = oldString.length(); buf.append(line2,0,i).append(newString2); i += oLength; int j = i; while((i = lcLine.indexOf(lcOldString,i)) != -1){ buf.append(line2,j,i - j).append(newString2); i += oLength; j = i; } buf.append(line2,j,line2.length - j); return buf.toString(); } return line; }
主要是将要替换的串,和源字符转为小写,替换为目标字符,思路很上面的差不多。
还有一些经常使用的一些比如HTML、XML一些特殊字符的一些过滤:
public static final String escapeHTMLTags(String in) { if (in == null) { return null; } char ch; int i=0; int last=0; char[] input = in.toCharArray(); int len = input.length; StringBuffer out = new StringBuffer((int)(len*1.3)); //这里的初始化容量,初步为原来的1.3倍。 for (; i < len; i++) { ch = input[i]; if (ch > '>') { continue; } else if (ch == '<') { if (i > last) { out.append(input, last, i - last); } last = i + 1; out.append(LT_ENCODE); // LT_ENCODE="<" } else if (ch == '>') { if (i > last) { out.append(input, last, i - last); } last = i + 1; out.append(GT_ENCODE); // GT_ENCODE = ">" } } if (last == 0) { return in; } if (i > last) { //直接拷贝后面的非HTML字符 out.append(input, last, i - last); } return out.toString(); }
方法看起来还是比较简单的。
那我们在看看关于XML替换的,在XML中&也也是一个特殊字符,
public static final String escapeForXML(String in) { if (in == null) { return null; } char ch; int i=0; int last=0; char[] input = in.toCharArray(); int len = input.length; StringBuffer out = new StringBuffer((int)(len*1.3)); for (; i < len; i++) { ch = input[i]; if (ch > '>') { continue; } else if (ch == '<') { if (i > last) { out.append(input, last, i - last); } last = i + 1; out.append(LT_ENCODE); } else if (ch == '&') { if (i > last) { out.append(input, last, i - last); } last = i + 1; out.append(AMP_ENCODE); // AMP_ENCODE = "&" } else if (ch == '"') { if (i > last) { out.append(input, last, i - last); } last = i + 1; out.append(QUOTE_ENCODE); } } if (last == 0) { return in; } if (i > last) { out.append(input, last, i - last); } return out.toString(); }
方法差不多.
其实在实际编程过程中我们经常使用commones-utils.jar里面的StringUtil,或者Spring里面带的一些Util方法,或者社区里面一些爱好者写的Util类,只要大概知道他们是怎么实现的,用他们的还是可以节省很多时间。
发表评论
-
maven的system scope的依赖在打包的时候不出现在lib里面的解决
2017-09-20 11:21 0上周遇到一个问题,一个sytem scope的依赖,在导出的 ... -
JAVA静态代码块
2015-04-07 16:26 2034今天遇到下面的代码 ... -
StringUtils.repeat函数赏析与疑问
2014-09-01 18:43 6090今天实现一个字符串拼接的一个需求,比如: ... -
java服务的培训ppt
2014-08-30 23:01 1582给应届生培训java web 服 ... -
给新人制定的java学习计划
2014-08-30 22:52 2499花了一点时间,给团队应届生和实习生制定 ... -
获取手机的mac地址
2014-04-10 22:20 3405与IP不同,MAC是指连接WIFI使用的无线网卡的物理地址, ... -
解决errorpage里面取不到Authentication的问题
2013-01-20 23:56 2453本人原创,发现一些网站无道德的抓取 ... -
SimpleDateFormat使用的时候的注意点
2012-12-06 20:59 2056今天在帮助同事查找一个项目bug的时候发现一个很奇怪 ... -
java和javascript的正则表达式有点不同
2012-11-06 18:54 1447今天在项目中遇 ... -
velocity 1.6.4的一个bug
2012-09-10 17:24 2179$.ajax()在Velocity中会冲突, 总之 ... -
一种多数据源分页算法
2012-09-10 17:13 7551以前开发一个系统,需要去多个系统去取数据,简单期间,比 ... -
使用stringBuffer和StringBuilder拼串要注意的问题
2012-07-30 17:30 8098今天在和同事排除一个问题的时候发现,从 ... -
java获取当月的工作日
2012-05-10 12:07 6134在这个记录一下,记录java获取某个月的工作日的代码,方便以 ... -
webservice引用传参
2012-04-19 19:38 1449http://www.blogjava.net/xylz/ar ... -
java获取当天的开始时间,当前周的开始时间
2012-04-16 17:31 19595在程序里面要获取当前的开始时间和结束时间,以及当前天 ... -
edtFTPj源码学习
2012-04-11 16:25 1256下面是edtFTPj的源码学习,下面的类图都是我自己亲手花的, ... -
ftp协议研究
2012-03-12 17:34 1272ACTIVE FTP OPERATION 1、客户端使用源 ... -
西安交通大学的错误日志
2011-12-14 13:30 1010西安交大的网站报错了,记录下出错日志,改天研究一下。 HT ... -
tomcat的favicon.ico的用法
2011-12-01 20:00 22371. web.xml文件添加下面的mime-mapping ... -
htmlunit模拟sso登陆
2011-07-27 14:45 6940import java.io.IOException; ...
相关推荐
jive forums 设计模式 Version: 3.2.9 Below is a list of known issues affecting this release of Jive Forums (3.2.9).
- 首先,在MySQL中创建一个名为“jive”的数据库。 - 运行提供的`jive_mysql.sql`脚本来初始化数据库结构。 2. **数据库配置**: - 在配置文件中指定数据库驱动为`org.gjt.mm.mysql.Driver`。 - 设置连接URL为`...
JAVA缓存研究之剖析Jive的缓存机制JAVA缓存研究之剖析Jive的缓存机制
深入研究Jive的源码,不仅可以帮助我们理解大型社交系统的架构设计,也能让我们更好地掌握Java编程语言以及设计模式的应用。本文将围绕Jive Java版源码,详细解析其中的关键技术和设计模式。 首先,源码中的设计...
8. **模板方法模式**:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。JIVE的帖子发布流程可能就是一个模板,具体细节如内容过滤、格式化等由子类实现。 9. **状态模式**:允许对象在其内部状态改变时改变其...
jive论坛源码,jive项目源码,jive源码,Jive是国外一个非常著名的BBS程序,完全开放源码.jive论坛源码,jive项目源码,jive源码,Jive是国外一个非常著名的BBS程序,完全开放源码.jive论坛源码,jive项目源码,jive源码,...
系统设计 1 jive设计思路 2 jive的工作内幕 3 Jive源代码研究 4 Jive中的设计模式 5 jive学习笔记 <br> 设计模式 1 大道至简-Java之23种模式一点就通 2 设计模式...
《深入剖析Jive 2.5源代码:安装与研究指南》 Jive是一款功能强大的社交网络软件,它为企业提供了一个全面的协作平台,让用户能够进行沟通、分享知识和协同工作。在这里,我们重点关注的是Jive 2.5版本的源代码。源...
本文将深入探讨Jive 1.2版本中的核心概念和技术,旨在为对Java Web开发感兴趣的朋友们提供一个学习和研究的窗口。 首先,我们要了解Jive的架构设计。Jive论坛基于Java Servlet和JavaServer Pages(JSP)技术构建,...
Jive设计模式集合(中文) 详细的介绍jive的学习资源,想修炼code内功的就要好好研究设计模式,而jive是学习设计模式最好的例子。里面还有工具的连接向导,方便实用。如果你觉得好,给个好评!
- **实现方式**:Jive中的所有核心接口都有相应的数据库实现,例如`DbForum`、`DbForumMessage`等。这种方式使得系统能够轻松地支持不同的后端存储方案,例如使用文件系统替代数据库作为存储媒介,只需实现相同的...
在Java开发者的学习路径中,掌握Jive不仅能提升你的Web开发技能,还能拓宽你在企业级应用开发领域的视野。 首先,我们来了解一下Jive的基本概念。Jive基于Java技术构建,采用了服务导向架构(SOA),支持RESTful ...
通过研究Jive论坛的源代码,我们可以深入了解JAVA在大型社区应用中的实际运用,以及如何运用设计模式来构建可扩展、易维护的系统。 首先,让我们关注“Jive论坛”的核心功能。Jive论坛主要由用户管理、论坛版块、...
《Jive研究资料》 Jive论坛是一款广受欢迎的社区软件,它被众多企业和组织用于构建内部交流平台,促进团队协作和知识分享。对于新手来说,Jive提供了一个绝佳的平台来理解和实践设计模式,这将有助于提升软件开发...
**Jive论坛研究** Jive论坛是一款基于Java技术构建的企业级社交网络平台,它主要用于创建在线社区,促进用户之间的互动和协作。这个压缩包文件集合包含了一系列与Jive论坛相关的研究资料,包括用户可能遇到的问题及...
源代码中的JdonFramework是Jive的重要组成部分,这是一个轻量级、高效的框架,用于构建可扩展和高性能的Web应用程序。JdonFramework的设计理念是“简洁、灵活”,它提供了一种模块化的方法来组织和管理应用的组件,...
在本文中,我们将深入探讨Jive的源码,以及如何利用这些源码进行学习和开发。 首先,让我们关注一下Jive的核心组件: 1. **skins**: 这个目录包含Jive的界面皮肤和样式。了解这部分源码可以帮助我们理解如何自定义...
在Jive Eclipse中,这些功能被无缝整合到开发环境中,使得开发者可以即时讨论问题、分享代码片段、创建任务和跟踪项目进度,从而打破传统的沟通壁垒,提高团队协作效率。 2. **Eclipse集成开发环境**: Eclipse是...
Jive论坛的优点 是由于采用缓冲机制,可以承受巨大访问量,同时能保持快速反应,在国外站点采用很多。...在Jive 2.1中有Licence的限制。 本站提供的是Jive 1.2.4开源代码下载,供研读,学习设计模式。