String类的 trim() 方法的基本使用 & 源码解析

String类的 trim()方法 的基本使用 & 源码解析

一、trim()方法 基本使用

1、trim() 简单介绍

trim(): 去掉String字符串的首尾空格。

用法如下:

String str = " ss aa ";
String newStr = str.trim(); //newStr的值为"ss aa"

2、trim() 使用案例

    public static void main(String[] args) {
    
    
        // 1、字符串中包含部分空格字符
        System.out.println("1、字符串中包含部分空格字符:");
        System.out.println(" ss aa ");
        System.out.println(" ss aa ".trim());
        System.out.println(" ss aa ".isEmpty());
        System.out.println(" ss aa ".trim().isEmpty());
        // 2、字符串全是空格字符
        System.out.println("2、字符串全是空格字符:");
        System.out.println("  ");
        System.out.println("  ".trim());
        System.out.println("  ".isEmpty());
        System.out.println("  ".trim().isEmpty());
        // 3、空字符
        System.out.println("3、空字符:");
        System.out.println("");
        System.out.println("".trim());
        System.out.println("".isEmpty());
        System.out.println("".trim().isEmpty());
    }

输出结果:

1、字符串中包含部分空格字符:
 ss aa 
ss aa
false
false
2、字符串全是空格字符:
  

false
true
3、空字符:


true
true

二、trim()方法 源码解析

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    
    

    /** The value is used for character storage. */
    private final char value[]; // 字符数组

    /** Cache the hash code for the string */
    private int hash; // Default to 0 // 哈希码

    /** use serialVersionUID from JDK 1.0.2 for interoperability */
    private static final long serialVersionUID = -6849794470754667710L; // 序列号




    /**
     * Allocates a new {@code String} that contains characters from a subarray
     * of the character array argument. The {@code offset} argument is the
     * index of the first character of the subarray and the {@code count}
     * argument specifies the length of the subarray. The contents of the
     * subarray are copied; subsequent modification of the character array does
     * not affect the newly created string.
     *
     * @param  value
     *         Array that is the source of characters
     *
     * @param  offset
     *         The initial offset
     *
     * @param  count
     *         The length
     *
     * @throws  IndexOutOfBoundsException
     *          If the {@code offset} and {@code count} arguments index
     *          characters outside the bounds of the {@code value} array
     */
    public String(char value[], int offset, int count) {
    
    
        if (offset < 0) {
    
    
            throw new StringIndexOutOfBoundsException(offset);
        }
        if (count <= 0) {
    
    
            if (count < 0) {
    
    
                throw new StringIndexOutOfBoundsException(count);
            }
            if (offset <= value.length) {
    
    
                this.value = "".value;
                return;
            }
        }
        // Note: offset or count might be near -1>>>1.
        if (offset > value.length - count) {
    
    
            throw new StringIndexOutOfBoundsException(offset + count);
        }
        this.value = Arrays.copyOfRange(value, offset, offset+count);
    }

    /**
     * Returns a string that is a substring of this string. The
     * substring begins at the specified {@code beginIndex} and
     * extends to the character at index {@code endIndex - 1}.
     * Thus the length of the substring is {@code endIndex-beginIndex}.
     * <p>
     * Examples:
     * <blockquote><pre>
     * "hamburger".substring(4, 8) returns "urge"
     * "smiles".substring(1, 5) returns "mile"
     * </pre></blockquote>
     *
     * @param      beginIndex   the beginning index, inclusive.
     * @param      endIndex     the ending index, exclusive.
     * @return     the specified substring.
     * @exception  IndexOutOfBoundsException  if the
     *             {@code beginIndex} is negative, or
     *             {@code endIndex} is larger than the length of
     *             this {@code String} object, or
     *             {@code beginIndex} is larger than
     *             {@code endIndex}.
     */
    public String substring(int beginIndex, int endIndex) {
    
    
        if (beginIndex < 0) {
    
    
            throw new StringIndexOutOfBoundsException(beginIndex);
        }
        if (endIndex > value.length) {
    
    
            throw new StringIndexOutOfBoundsException(endIndex);
        }
        int subLen = endIndex - beginIndex;
        if (subLen < 0) {
    
    
            throw new StringIndexOutOfBoundsException(subLen);
        }
        return ((beginIndex == 0) && (endIndex == value.length)) ? this
                : new String(value, beginIndex, subLen);
    }
	
    /**
     * Returns a string whose value is this string, with any leading and trailing
     * whitespace removed.
     * <p>
     * If this {@code String} object represents an empty character
     * sequence, or the first and last characters of character sequence
     * represented by this {@code String} object both have codes
     * greater than {@code '\u005Cu0020'} (the space character), then a
     * reference to this {@code String} object is returned.
     * <p>
     * Otherwise, if there is no character with a code greater than
     * {@code '\u005Cu0020'} in the string, then a
     * {@code String} object representing an empty string is
     * returned.
     * <p>
     * Otherwise, let <i>k</i> be the index of the first character in the
     * string whose code is greater than {@code '\u005Cu0020'}, and let
     * <i>m</i> be the index of the last character in the string whose code
     * is greater than {@code '\u005Cu0020'}. A {@code String}
     * object is returned, representing the substring of this string that
     * begins with the character at index <i>k</i> and ends with the
     * character at index <i>m</i>-that is, the result of
     * {@code this.substring(k, m + 1)}.
     * <p>
     * This method may be used to trim whitespace (as defined above) from
     * the beginning and end of a string.
     *
     * @return  A string whose value is this string, with any leading and trailing white
     *          space removed, or this string if it has no leading or
     *          trailing white space.
     */
    public String trim() {
    
    
        int len = value.length; // 字符数组的长度
        int st = 0; // 字符数组的索引
        char[] val = value;    /* avoid getfield opcode */

        while ((st < len) && (val[st] <= ' ')) {
    
    
            st++; // st 在本方法中作为beginIndex
        }
        while ((st < len) && (val[len - 1] <= ' ')) {
    
    
            len--; // len 在本方法中作为endIndex
        }
        return ((st > 0) || (len < value.length)) ? substring(st, len) : this;
    }

}

猜你喜欢

转载自blog.csdn.net/Shipley_Leo/article/details/131030905