共同学习Java源码--常用数据类型--String(十六)

    public String trim() {
        int len = value.length;
        int st = 0;
        char[] val = value;    /* avoid getfield opcode */


        while ((st < len) && (val[st] <= ' ')) {
            st++;
        }
        while ((st < len) && (val[len - 1] <= ' ')) {
            len--;
        }
        return ((st > 0) || (len < value.length)) ? substring(st, len) : this;

    }

这个方法非常重要,是去掉前后空格的方法。首先定义变量len,其值为本字符串的长度。定义变量st,其初始值为0,用来记录下标。定义变量val,引用本字符串的value。

进入第一个while循环,判断如果下标一直小于长度,且下标所在的字符元素是空字符,则下标自增。

第二个while循环判断如果下标一直小于长度,且长度减一也就是当前最后一个字符元素是空字符,则长度自减。

最后判断下标是否大于零或长度是否小于原字符串的长度,换句话说就是发生了截取与否,发生了就调用substring方法 ,否则返回原字符串。

    public String toString() {
        return this;
    }

这个方法很简单,就是返回本对象。

    public char[] toCharArray() {
        // Cannot use Arrays.copyOf because of class initialization order issues
        char result[] = new char[value.length];
        System.arraycopy(value, 0, result, 0, value.length);
        return result;
    }

这个方法就是将本对象的value拷贝到一个新的char数组中,完完全全的拷贝。

    public static String format(String format, Object... args) {
        return new Formatter().format(format, args).toString();
    }

这个方法就是将后面的无数量限制的参数按照第一个参数format规定的格式打印出来,很类似c语言的printf方法里的相关实现。举个例子

System.out.printf("年-月-日格式:%tF%n", new Date());就是按照年-月-日格式打印出new Date()

    public static String format(Locale l, String format, Object... args) {
        return new Formatter(l).format(format, args).toString();
    }

这个方法和上面类似,就是需要手动输入locale,而上面的方法则采用默认的locale。

    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }

这个方法先判断参数是否为空,如果不为空则调用参数的toString方法。

    public static String valueOf(char data[]) {
        return new String(data);
    }

这个方法的参数是一个char数组,将这个char数组传入String的构造方法中,返回一个新的String对象。

    public static String valueOf(char data[], int offset, int count) {
        return new String(data, offset, count);
    }

这个方法和上一个方法类似,只是增加了offset和count参数,将char数组传入String的构造方法中,同时传入offset和count进行截取,最后返回新的String对象。

    public static String valueOf(boolean b) {
        return b ? "true" : "false";
    }

    public static String valueOf(char c) {
        char data[] = {c};
        return new String(data, true);
    }

    public static String valueOf(int i) {
        return Integer.toString(i);
    }

    public static String valueOf(long l) {
        return Long.toString(l);
    }

    public static String valueOf(float f) {
        return Float.toString(f);
    }

    public static String valueOf(double d) {
        return Double.toString(d);
    }

这些方法就是将这些数据类型返回成String,不细讲了很简单。

至此,String类讲解完毕

你可能感兴趣的:(共同学习Java源码--常用数据类型--String(十六))