`

java中string的replace方法解析

阅读更多
今天在写代码时犯了一个挺低级的错误,所以记录在此,以免以后再犯。
代码其实很简单,就是用string的replace方法,如下:
	public void doFilter() {
		// TODO Auto-generated method stub
         String mes = "This is a < script >";
         mes.replace('<', '[').replace('>', ']');
         //mes += "---HtmlFilter----";
         System.out.println(mes);
         	}

但打印输入的一直是This is a < script >,开始还以为是replace方法没有起作用。在看了replace方法的源码以后才恍然大悟,源码如下:
 public String replace(char oldChar, char newChar) {
	if (oldChar != newChar) {
	    int len = count;
	    int i = -1;
	    char[] val = value; /* avoid getfield opcode */
	    int off = offset;   /* avoid getfield opcode */

	    while (++i < len) {
		if (val[off + i] == oldChar) {
		    break;
		}
	    }
	    if (i < len) {
		char buf[] = new char[len];
		for (int j = 0 ; j < i ; j++) {
		    buf[j] = val[off+j];
		}
		while (i < len) {
		    char c = val[off + i];
		    buf[i] = (c == oldChar) ? newChar : c;
		    i++;
		}
		return new String(0, len, buf);
	    }
	}
	return this;
    }

从源码我们可以看到,replace方法中,如果替换字符后,它是返回一个重新new的string对象,原来的字符串是没有变的。所以用replace方法时一定要有一个string的变量接受替换的结果。所以最初的方法应该做如下改动:
	public void doFilter() {
		// TODO Auto-generated method stub
         String mes = "This is a < script >";
         String temp = mes.replace('<', '[').replace('>', ']');
         //mes += "---HtmlFilter----";
         System.out.println(temp );
         	}

这样输出如愿的字符串了。
分享到:
评论

相关推荐

    Java字符串替换函数replace()用法解析

    主要介绍了Java字符串替换函数replace()用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java发送短信之AT指令

    public String sendAT(String atcommand) throws java.rmi.RemoteException { String s = ""; try { Thread.sleep(100); writeln(atcommand); Thread.sleep(80); s = read(); Thread.sleep(100); } catch ...

    Jsoup学习——Saz2Csv解析器

    5、Java中字符串的处理:String类和StringBuffer类,substring()、indexOf()、lastIndexOf()、replace()、replaceAll()、trim()、toLowerCase()、endsWith()、equals()、split()等方法的使用 6、Java类集:List,...

    Json解析ParsreTools.zip

    一个SON解析封装类, public class ParsreTools { public static &lt;T&gt; T pasrsJsonStrSimpleT(String jsonString, String key, Class&lt;T&gt; cls) { T t = null; Field fields[] = cls.getDeclaredFields(); ...

    网络获取json解析json以及子线程显示

    String data = responseData.replace("try{jsonp9(", ""); data = data.substring(0, data.length() - 15); parseJSONWithGSON(data); // parseJSONWithJSONObject(data); // parseXMLWithSAX(responseData); // ...

    [LeetCode 周赛184] 3. HTML 实体解析器(字符串替换、坑点注意、常规解法)

    这题本来对于 java、py 选手来讲,直接库函数 replace 一行搞定了…对于 C++ 选手就老老实实的进行字符串匹配、替换吧。简单说下思路: 首先利用 map 将 HTML 字符实体与对应字符进行一个匹配存储 双重循环,首先...

    带注释的Bootstrap.java

    protected String replace(String str) { // Implementation is copied from ClassLoaderLogManager.replace(), // but added special processing for catalina.home and catalina.base. String result = str; ...

    freemarker语法完整版

    parse=true 是否作为ftl语法解析,默认是true,false就是以文本方式引入.注意在ftl文件里布尔值都是直接赋值 的如parse=true,而不是parse="true" 用例 /common/copyright.ftl 包含内容 Ftl代码 Copyright ...

    Jsoup+httpclient 模拟登陆和抓取

    private static String createHtml(HttpClient client, String newUrl) throws Exception { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); String filePath = toUrl + format.format(new ...

    freemarker总结

    这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: &lt;#if condition&gt;... &lt;#elseif condition&gt;... &lt;#elseif condition&gt;... &lt;#else&gt; ... 例子如下: (age&gt;60)&gt;老年人 ...

    asp.net知识库

    你真的了解.NET中的String吗? .NET中的方法及其调用(一) 如何判断ArrayList,Hashtable,SortedList 这类对象是否相等 帮助解决网页和JS文件中的中文编码问题的小工具 慎用const关键字 装箱,拆箱以及反射 动态调用...

    正则表达式

    JavaScript的RegExp对象和String对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的方法. 在JavaScript中,正则表达式是由一个RegExp对象表示的.当然,可以使用一个RegExp()构造函数来创建RegExp...

    snoics-reptile 网页爬虫2.0

    reptile-replace-string["'\s][^]*&gt;]]&gt;&lt;/value&gt; &lt;/property&gt; &lt;property name="getRegexUrl"&gt; &lt;!-- 提取最终URL --&gt; &lt;ref bean="ahrefGetRegexUrl"/&gt; &lt;/property&gt; 其中ahrefGetRegexUrl是...

    ToolGood.Words:一个完整​​的高级敏感词(非法词脏字)检测过滤组件,附带繁体简体互换,支持全角半角互换,汉字转拼音,模糊搜索等功能

    C#语言,使用StringSearchEx2.Replace过滤,在48k敏感词库上的过滤速度超过3亿字符每秒。(cpu i7 8750h) csharp文件夹说明: ToolGood.Pinyin.Build: 生成词的拼音ToolGood.Pinyin.Pretreatment: 生成拼音预处理...

    adb1.0.26包含fastboot.exe

    INSTALL_FAILED_REPLACE_COULDNT_DELETE 替换时无法删除 INSTALL_FAILED_DEXOPT dex 优化验证失败或空间不足 INSTALL_FAILED_OLDER_SDK 设备系统版本低于应用要求 INSTALL_FAILED_CONFLICTING_PROVIDER 设备里...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    与Java和Perl不同,你不必把头埋进100多页的文档中努力学习才可以写出一个象样的程序。只要了解一些基本的语法和语言特色,你就可以开始你的PHP编码之旅了。之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅...

Global site tag (gtag.js) - Google Analytics