[英]Remove non printable character from pojo in java 8
我只想删除项目中String字段的不可打印字符,我知道我们可以使用
public String removeNonPrintable(String field) {
return field.replaceAll("[^A-Za-z0-9]", "");
}
从字符串中删除不可打印的字符。
但我想拥有通用方法,例如:
public <T> T removeNonPrintable(Class<T> myClassObject) {
/// Get only the string and remove non-printable code stuffs
return removedNonPrintableCharactersmyClassObject;
}
有人可以帮我做吗?
这个问题可能是重复的,但是我没有找到确切的解决方案。
您可以使用反射,这将是有问题的,并且不能保证适用于结构较深的字段。
或者,您可以只通过代码运行实例 :
public String removeNonPrintable(Object obj) {
return String.valueOf(obj).replaceAll("[^A-Za-z0-9]", "");
}
注意: String.valueOf()
用于避免必须处理obj
为null
。
如果将转换更改为以下内容,则可能会获得更大的成功:
replaceAll("[^ -~]", "")
这将删除所有非 “常规” ASCII字符(即,十进制的32至126之间)。
以下工作:
public static void removeNonPrintable(Node node) throws NoSuchFieldException, IllegalAccessException{
Field[] fields = Node.class.getDeclaredFields();
for(int i=0;i<fields.length;i++){
if(fields[i].getType().equals(String.class)) {
fields[i].set(node, removeNonPrintable(fields[i].get(node).toString()));
System.out.println(fields[i].get(node));
}
}
}
class Node{
String left;
String right;
int data;
public Node(String left, String right, Integer data){
this.left = left;
this.right = right;
this.data = data;
}
}
它适用于特定的类(例如Node)。 我正在尝试使其与Class<T>
但是现在正在提供一些例外。
您可以使用反射来做到这一点,但不建议这样做:
public static void main(String[] args) throws IllegalAccessException {
Person person = new Person();
person.setName("John***");
person.setAge(12);
final Field[] fields = person.getClass().getDeclaredFields();
for (Field field : fields) {
if (field.getType() == String.class) {
field.set(person, removeNonPrintable((String) field.get(person)));
}
}
System.out.println(person.getName());
System.out.println(person.getAge());
}
//using the regex provided by OP
private static String removeNonPrintable(String s) {
return s.replaceAll("[^A-Za-z0-9]", "");
}
而且,您必须将String字段更改为public访问器。 打印:-
John
12
更好的方法是在String字段的getter或setter方法中执行此操作。
例:-
public String getName() {
return removeNonPrintable(name);
}
要么
public void setName(String name) {
this.name = removeNonPrintable(name);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.