[英]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.