字符串的替代

给定一个字符串:如下,如何对{X}进行字符串替换?

String str ="姓名:{1},班级:{2},年龄:{3}";

参考使用:

public String replace(CharSequence target, CharSequence replacement)
将与字面目标序列匹配的字符串的每个子字符串替换为指定的字面替换序列。 替换从字符串开始到结束,例如,在字符串“aaa”中用“b”替换“aa”将导致“ba”而不是“ab”。
参数
target - 要替换的char值序列
replacement - char值的替换顺序
结果
生成的字符串 【注意】
举例:

		String str ="姓名:{1},班级:{2},年龄:{3}";
        String str1 = str.replace("{1}","小明")
                .replace("{2}","九年级(1)班")
                .replace("{3}","九年级(1)班");
        System.out.println(str);//姓名:{1},班级:{2},年龄:{3}
        System.out.println(str1);//姓名:小明,班级:九年级(1)班,年龄:九年级(1)班

源码解析:

public String replace(CharSequence target, CharSequence replacement) {
        return Pattern.compile(target.toString(), Pattern.LITERAL).matcher(
                this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
    }

1.调用Pattern.compile方法,将给定的正则表达式编译【也就是Pattern.LITERAL:启用模式的文字解析。当指定此标志时,则指定的输入字符串该模式被视为文字字符序列。】为具有给定正则表达式的模式标志。

public static Pattern compile(String regex, int flags) {
        return new Pattern(regex, flags);
    }

2.matcher.创建一了一个根据1种指定模式匹配给定的输入的匹配器。

public Matcher matcher(CharSequence input) {
        if (!compiled) {
            synchronized(this) {
                if (!compiled)
                    compile();
            }
        }
        Matcher m = new Matcher(this, input);
        return m;
    }

3.调用匹配器的quoteReplacement方法:先生成一个StringBuilder对象,循环遍历replacement的每个字符,将其的\或者$的字符串都换成换成\。

public static String quoteReplacement(String s) {
        if ((s.indexOf('\\') == -1) && (s.indexOf('$') == -1))
            return s;
        StringBuilder sb = new StringBuilder();
        for (int i=0; i<s.length(); i++) {
            char c = s.charAt(i);
            if (c == '\\' || c == '$') {
                sb.append('\\');
            }
            sb.append(c);
        }
        return sb.toString();
    }

4.再调用Matcher方法的replaceAll方法替换每个匹配的子序列构造的字符串

public String replaceAll(String replacement) {
        reset();
        //查找匹配的输入序列的下一个子序列,若找到返回true
        boolean result = find();
        if (result) {
            StringBuffer sb = new StringBuffer();
            //遍历新字符串,替换每个匹配的子序列构造的字符串
            do {
                appendReplacement(sb, replacement);
                result = find();
            } while (result);
            appendTail(sb);
            return sb.toString();
        }
        return text.toString();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值