好久没写博客了,实习之后,每天早上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操作没毛病,所以会返回一个新的引用即为替换后的字符串。