Java 字符串需注意的点

问:下面代码的输出是什么?
String name = "abcabc";
name.replace("b", "a");
System.out.println(name);

答:输出结果是

abcabc

因为 String 的 replace 方法是新创建字符串的替换,具体参见如下源码:

public String replace(CharSequence target, CharSequence replacement) {
    //两个参数都不能为空
    if (target == null) {
        throw new NullPointerException("target == null");
    }

    if (replacement == null) {
        throw new NullPointerException("replacement == null");
    }
    //替换和被替换的字符串
    String replacementStr = replacement.toString();
    String targetStr = target.toString();

    ......

    // This is the "regular" case.
    int lastMatch = 0;
    StringBuilder sb = null;
    for (;;) {
        int currentMatch = indexOf(this, targetStr, lastMatch);
        if (currentMatch == -1) {
            break;
        }
        //新建
        if (sb == null) {
            sb = new StringBuilder(len);
        }

        sb.append(this, lastMatch, currentMatch);
        sb.append(replacementStr);
        lastMatch = currentMatch + targetStr.length();
    }

    if (sb != null) {
        //返回替换后的新字符串
        sb.append(this, lastMatch, len);
        return sb.toString();
    } else {
        return this;
    }
}
问:下面代码的输出是什么?
String names = "a|b|c";
String[] ret1 = names.split("|");
System.out.println(ret1.length);

答:输出结果是 5。
因为 split 方法接收的参数是一个正则表达式字符串,| 在正则表达式里是个特殊字符,具备特殊的意义,或者表示正则匹配中的或,比如 ",|;" 正则用来匹配 ,;"|" 等同于 "",这里要想正确 split 需要写为 "\\|""[|]" 即可。

特别注意,split(reg) 方法是根据匹配给定的正则表达式来拆分字符串,reg 取值特别注意 . |* 等转义字符的问题,遇到这些正则表达式转义字符务必添加 \\ 转义。

本文参考自
https://mp.weixin.qq.com/s/znrqjSjmzSmeU7aRNb_RDQ

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。