Java的String.trim()方法无效的原因

最近遇到String.trim()无效的问题,字符串后面明明有空格就是去不掉,搜索了下资料,原来是因为trim()方法只能去掉半角空格,因为在英文中用的是半角,中文才有全角。。。

两种方法解决:

1.重写trim()方法:

/**
 * 去除字符串前后各种编码类型的空格
 * update 2019
 */
public class StringUtil {

    /**普通的英文半角空格Unicode编码*/
    private static final int SPACE_32 = 32;

    /**中文全角空格Unicode编码(一个中文宽度)*/
    private static final int SPACE_12288 = 12288;

    /**普通的英文半角空格但不换行Unicode编码(==   ==   == no-break space)*/
    private static final int SPACE_160 = 160;

    /**半个中文宽度(==   == en空格)*/
    private static final int SPACE_8194 = 8194;

    /**一个中文宽度(==   == em空格)*/
    private static final int SPACE_8195 = 8195;

    /**四分之一中文宽度(四分之一em空格)*/
    private static final int SPACE_8197 = 8197;

    /**窄空格*/
    private static final int SPACE_8201 = 8201;

    /**
     * 去除字符串前后的空格, 包括半角空格和全角空格(中文)等各种空格, java的string.trim()只能去英文半角空格
     * @param str
     */
    public static String trim(String str) {
        if (TextUtils.isEmpty(str)) {
            return str;
        }

        char[] val = str.toCharArray();
        int st = 0;
        int len=val.length;
        while ((st < len) && isSpace(val[st])) {
            st++;
        }
        while ((st < len) && isSpace(val[len - 1])) {
            len--;
        }
        return ((st > 0) || (len < val.length)) ? str.substring(st, len) : str;
    }

    public static boolean isSpace(char aChar) {
        return aChar == SPACE_32 || aChar == SPACE_12288 || aChar == SPACE_160 || aChar == SPACE_8194
                || aChar == SPACE_8195 || aChar == SPACE_8197 || aChar == SPACE_8201;
    }
}

2.替换中文空格为因为英文空格后再trim():

str = str.replace((char) 12288, ' ');
str=str.trim();

12288是中文全角空格的unicode编码

 

你可能感兴趣的:(Java)