簡體   English   中英

在Java 8中從Pojo中刪除不可打印的字符

[英]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()用於避免必須處理objnull

如果將轉換更改為以下內容,則可能會獲得更大的成功:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM