其实在java中去除字符串中的空格是很简单的:str.replace(" ", "")(去除字符串中所有空格)trim()(将字符串前后的空格去除),但是当要对类每个属性去判断还是很麻烦。
我们经常从前台传以类为对象的参数,如果类的属性比较少还好,如果有十几二十个要判断的,代码就太多了。
这里仍然使用java的 invoke反射来获取属性的get和set方法,我在java实现以类为对象把各属性值值放入map里已经 写过获取 get方法的代码,这里主要写set方法
private static void doSetValue(Object obj,Class<?> classType,String fieldName,String value){
String firstLetter=fieldName.substring(0,1).toUpperCase();
String setter = "set"+firstLetter+fieldName.substring(1);
try{
Method method = obj.getClass().getMethod(setter, new Class[]{classType});
method.invoke(obj, new Object[] {value});
}catch (Exception e){
e.printStackTrace();
}
}
其实获取调用set方法和get方法大致相同,只不过set方法是有参数的,因此要在getMethod方法中传入带了属性类型的Class[]{classType}.
去除类对象中个属性空格的逻辑也很简单,就是遍历各属性,当其值不为null且类型为String时利用java.lang.String自带的去除空格方法操作即可,代码如下。
public static Object trimObject(Object obj){
if(obj==null)
return null;
Field[] fields = obj.getClass().getDeclaredFields();
for(Field field : fields){
Class<?> type = field.getType();
if("class java.lang.String".equals(type.toString())){
String fieldName = field.getName();
Object value=getValueByFieldName(fieldName,obj);
if(value!=null){
doSetValue(obj, type, fieldName,value.toString().trim() );//去除前后端空格
//doSetValue(obj, type, fieldName,value.toString().replace(" ", "") );去除所有空格
}
}
}
return obj;
}