String.replace问题

好久没写博客了,实习之后,每天早上7点起床,晚上9点到宿舍,就在文本文件里记录了遇到的一些问题,这阵子会开始陆续整理到博客上,个人觉得很多小问题还是挺有意思的。

String类的replace方法很有意思,之前遇到一个replace的问题,当时是要检测用户输入字符串是否包含不规则的平方和平方米的输入,有则替换为规范的符号,在后台进行替换的时候,发现写到数据库的数据还是不规范的。这是原有的方法:

if (area.contains("m2"))
{
    area.replace("m2", "㎡");
}

然后进行调试,发现读到的area确实包含非规范符号,也进入判断区了,怎么没有替换呢,后然仔细检查发现,说不大也不大,说大也大的问题

String的replace方法不会替换原有的字符串,而是会返回一个新字符串为替换后的字符串,所以如果保存的原有的字符串当然会出问题啦。

然后我看了一下replace的源代码:

public String replace(CharSequence target, CharSequence replacement) {
    return Pattern.compile(target.toString(), Pattern.LITERAL).matcher(                     this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
    }
其中调用了正则表达式的匹配方法和replaceAll方法,如下:
public String replaceAll(String replacement) {
        reset();
        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();
    }

因为要不停的改写字符串,所以在其中new了个StringBuffer用来append操作没毛病,所以会返回一个新的引用即为替换后的字符串。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值