`

jive中StringUtils的一些方法的研究

    博客分类:
  • java
阅读更多
我们经常在代码中使用String的replace方法和replaceAll方法,但JDK的类调用比较复杂,下面我们看看jive中的实现:
 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="&lt;"
            } else if (ch == '>') {
                if (i > last) {
                    out.append(input, last, i - last);
                }
                last = i + 1;
                out.append(GT_ENCODE); // GT_ENCODE = "&gt;"
            }
        }
        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 = "&amp;"
            } 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类,只要大概知道他们是怎么实现的,用他们的还是可以节省很多时间。
分享到:
评论

相关推荐

    jive论坛研究-jive源码

    jive forums 设计模式 Version: 3.2.9 Below is a list of known issues affecting this release of Jive Forums (3.2.9).

    Jive的安装指导。

    - 首先,在MySQL中创建一个名为“jive”的数据库。 - 运行提供的`jive_mysql.sql`脚本来初始化数据库结构。 2. **数据库配置**: - 在配置文件中指定数据库驱动为`org.gjt.mm.mysql.Driver`。 - 设置连接URL为`...

    JAVA缓存研究之剖析Jive的缓存机制

    JAVA缓存研究之剖析Jive的缓存机制JAVA缓存研究之剖析Jive的缓存机制

    Jive java版源码

    深入研究Jive的源码,不仅可以帮助我们理解大型社交系统的架构设计,也能让我们更好地掌握Java编程语言以及设计模式的应用。本文将围绕Jive Java版源码,详细解析其中的关键技术和设计模式。 首先,源码中的设计...

    JIVE论坛与设计模式

    8. **模板方法模式**:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。JIVE的帖子发布流程可能就是一个模板,具体细节如内容过滤、格式化等由子类实现。 9. **状态模式**:允许对象在其内部状态改变时改变其...

    jive论坛源码,jive项目源码,jive源码

    jive论坛源码,jive项目源码,jive源码,Jive是国外一个非常著名的BBS程序,完全开放源码.jive论坛源码,jive项目源码,jive源码,Jive是国外一个非常著名的BBS程序,完全开放源码.jive论坛源码,jive项目源码,jive源码,...

    jive.chm

    系统设计 1 jive设计思路 2 jive的工作内幕 3 Jive源代码研究 4 Jive中的设计模式 5 jive学习笔记 &lt;br&gt; 设计模式 1 大道至简-Java之23种模式一点就通 2 设计模式...

    jive 2.5 源代码

    《深入剖析Jive 2.5源代码:安装与研究指南》 Jive是一款功能强大的社交网络软件,它为企业提供了一个全面的协作平台,让用户能够进行沟通、分享知识和协同工作。在这里,我们重点关注的是Jive 2.5版本的源代码。源...

    最早最经典的Jive论坛开源 源码

    本文将深入探讨Jive 1.2版本中的核心概念和技术,旨在为对Java Web开发感兴趣的朋友们提供一个学习和研究的窗口。 首先,我们要了解Jive的架构设计。Jive论坛基于Java Servlet和JavaServer Pages(JSP)技术构建,...

    Jive设计模式集合(中文)

    Jive设计模式集合(中文) 详细的介绍jive的学习资源,想修炼code内功的就要好好研究设计模式,而jive是学习设计模式最好的例子。里面还有工具的连接向导,方便实用。如果你觉得好,给个好评!

    Jive论坛分析_完整版

    - **实现方式**:Jive中的所有核心接口都有相应的数据库实现,例如`DbForum`、`DbForumMessage`等。这种方式使得系统能够轻松地支持不同的后端存储方案,例如使用文件系统替代数据库作为存储媒介,只需实现相同的...

    java学习必学系统--jive

    在Java开发者的学习路径中,掌握Jive不仅能提升你的Web开发技能,还能拓宽你在企业级应用开发领域的视野。 首先,我们来了解一下Jive的基本概念。Jive基于Java技术构建,采用了服务导向架构(SOA),支持RESTful ...

    Jive论坛原代码.rar

    通过研究Jive论坛的源代码,我们可以深入了解JAVA在大型社区应用中的实际运用,以及如何运用设计模式来构建可扩展、易维护的系统。 首先,让我们关注“Jive论坛”的核心功能。Jive论坛主要由用户管理、论坛版块、...

    Jive研究资料

    《Jive研究资料》 Jive论坛是一款广受欢迎的社区软件,它被众多企业和组织用于构建内部交流平台,促进团队协作和知识分享。对于新手来说,Jive提供了一个绝佳的平台来理解和实践设计模式,这将有助于提升软件开发...

    jive研究

    **Jive论坛研究** Jive论坛是一款基于Java技术构建的企业级社交网络平台,它主要用于创建在线社区,促进用户之间的互动和协作。这个压缩包文件集合包含了一系列与Jive论坛相关的研究资料,包括用户可能遇到的问题及...

    Jive源代码.zip

    源代码中的JdonFramework是Jive的重要组成部分,这是一个轻量级、高效的框架,用于构建可扩展和高性能的Web应用程序。JdonFramework的设计理念是“简洁、灵活”,它提供了一种模块化的方法来组织和管理应用的组件,...

    Jive--SourceFile

    在本文中,我们将深入探讨Jive的源码,以及如何利用这些源码进行学习和开发。 首先,让我们关注一下Jive的核心组件: 1. **skins**: 这个目录包含Jive的界面皮肤和样式。了解这部分源码可以帮助我们理解如何自定义...

    Jive eclipse Jive eclipse

    在Jive Eclipse中,这些功能被无缝整合到开发环境中,使得开发者可以即时讨论问题、分享代码片段、创建任务和跟踪项目进度,从而打破传统的沟通壁垒,提高团队协作效率。 2. **Eclipse集成开发环境**: Eclipse是...

    Jive论坛1.2.4版

    Jive论坛的优点 是由于采用缓冲机制,可以承受巨大访问量,同时能保持快速反应,在国外站点采用很多。...在Jive 2.1中有Licence的限制。 本站提供的是Jive 1.2.4开源代码下载,供研读,学习设计模式。

Global site tag (gtag.js) - Google Analytics