2016-08-23 72 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'项上强制这个条件。 –