2016-08-23 41 views
0

我有一個需求,我需要從字符串中刪除那些不在數組列表中的特殊字符。當發現當前的代碼刪除所有特殊字符,使用Java正則表達式解析特殊字符

String Modified_remark = final_remark.replaceAll("[^\\x00-\\x7F]", ""); 

此代碼將刪除字符串的所有特殊字符,但我想保留某些項目,如埃符號()&美光符號(μ)

例如,如果我在數組中放置允許的特殊字符,我希望代碼跳過替換,如果不匹配,則用「」(空引號)替換。

String[] allowedChar = {Å, μ}; 

在用戶的要求下添加更多。任何人都可以幫助這個邏輯。

回答

2

剛纔的所有allowedChar s添加到例外列表中的正則表達式:

final_remark.replaceAll("[^\\x00-\\x7F" + String.join("", allowedChar) + "]", ""); 

演示:https://ideone.com/iQWvHI

更新

由於Wiktor的Stribiżew正確地指出的那樣,這個簡單的代碼如果allowedChar包含一些正則表達式特殊字符則會中斷。由於需求暗示allowedChar僅包含非ACSII字符,我們可能會在allowedChar添加條件如下:

String[] allowedChar = {"Å", "μ", "]"}; 
String allowedChars = ""; 
for (String ch : allowedChar) 
    if (ch.matches("^[^\\x00-\\x7F]$")) 
     allowedChars += ch; 
String Modified_remark = final_remark.replaceAll("[^\\x00-\\x7F" + allowedChars + "]", ""); 

演示:https://ideone.com/94513e

+0

什麼是字符']'或'['?或'''? –

+0

嗯,是的,那會破壞代碼。但是這個要求隱含地假設'allowedChar'只包含'\ x00- \ x7F'範圍之外的字符,所以作爲一個合理的折衷,我們可以在'allowedChar'項上強制這個條件。 –