2015-09-19 43 views
0

我有我的數據需要在各種其他應用程序進一步處理之前清理。在這個過程中,一個下游應用程序只允許一定範圍的Unicode字符。以下是我用來去除無效的Unicode字符的正則表達式。無法去除無效的Unicode字符java

/[^\u0009\u000a\u000d\u0020-\uD7FF\uE000-\uFFFD]/ 

但是,我仍然有問題讓正則表達式在Java中工作。有沒有特殊的方式來處理上述正則表達式,因爲它包含一系列的Unicode字符?

UPDATE: 這是我的測試相同,似乎並沒有得到它與@Andreas建議的工作方式:

public void testStripUnicode() { 
     String doc = "{\"fields\":{\"field1\":\"unicode char '\\u000b'\",\"field2\":[\"unicode char '\\u0003'\"]}}"; 
     String stripped = DocumentCleaner.clean(doc); 
     System.out.println(doc); 
     System.out.println(stripped); 
    } 

DOC
{"fields":{"field1":"unicode char '\u000b'","field2":["unicode char '\u0003'"]}} 剝離-doc的
{"fields":{"field1":"unicode char '\u000b'","field2":["unicode char '\u0003'"]}}

回答

0

應該沒問題,只需放下斜槓/並加上反斜槓\

String regex = "[^\\u0009\\u000a\\u000d\\u0020-\\uD7FF\\uE000-\\uFFFD]"; 
String stripped = value.replaceAll(regex, ""); 

或者,如果你反覆做,可以解析正則表達式一次,前面:

// Prepare regular expression 
Pattern p = Pattern.compile("[^\\u0009\\u000a\\u000d\\u0020-\\uD7FF\\uE000-\\uFFFD]"); 

// Use regular expression 
String stripped = p.matcher(value).replaceAll(""); 
+0

嘗試同樣的。似乎沒有工作。 –

+0

@AdiGuN測試字符串不包含您的正則表達式將剝離的任何字符 - 字符串文字「」\\ u0003「'是六個字符反斜槓,u,0003,而不是單個字符U + 0003。如果你想刪除這些轉義序列以及它們表示的字符,那麼你需要一個不同的正則表達式。 –

+0

@IanRoberts你能否詳細說明一下。正則表達式似乎在它前面包含^,所以\ u0003應該被剝離正確嗎? –