/**
* 去除實體類所有String類型屬性的空格
* @author yupanpan
* @date 2019/9/25 10:04
* @param object
* @param b true-去除字符串所有空格 false-只去除頭尾空格
* @return java.lang.Object
*/
public static Object formatBeanStringBlankSpace(Object object,Boolean b){
//獲取該類中所有的域(屬性)
Field[] fields = object.getClass().getDeclaredFields();
for(Field field : fields){
//對所有的屬性判斷是否爲String類型
if(field.getType().equals(String.class)){
//將私有屬性設置爲可訪問狀態
field.setAccessible(true);
try {
Object o = field.get(object);
if(o!=null&&!o.equals("")){
String string = (String)o;
if(b){
string = string.replaceAll(" ","");
}else {
string=string.trim();
}
//相當於調用了set方法設置屬性
field.set(object,string);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
return object;
}
有意思的是string.trim(),百分之九十的都認爲就是去除頭尾空格,其實不是
看以下代碼
把代碼放入Idea,是以下效果
放入Myeclipse/Eclipse,不會識別。是以下效果
放入Notepad++,長下面的樣子
最主要的是後面的被trim()掉了,這個特殊的符號在eclipse是看不到的,不佔空間。如果在代碼中出現這種的字符串,特別是eclipse,排查問題會非常痛苦
從這一點可以看出,trim()不只是去除空格那麼簡單,查看源碼
從註釋來看,再結合ASCII看,空格對應32,其實trim()過濾的是32以及之前的字符,一般出現此類問題很少,如果始終不知道問題,可以從這點着手,我們比較熟悉的水平製表符(^I),回車(^M),以及Hive中默認使用的字段分隔符^A等等都會被過濾