2014-01-26 159 views
2

我想知道如何才能完全消除所有中的特殊字符。换句话说,我只会离开的话,从而消除任何其他字符+ -OC @ EE等从字符串中删除所有特殊字符java

现在我用

myString = Normalizer.normalize(myString, Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", ""); 

而是一些字符speacials仍然存在。

+1

定义 “特殊字符”。例如。 'é'是一个ASCII字母,可以放在一个单词中,因此您的问题不包含足够的信息。 – Simon

+0

这些@#+èé<>第 – user3187166

+0

只需制作一个过滤函数,在用“”替换每个不需要的字符后返回您的字符串。 –

回答

8

用只包含允许的字符的更严格的set替换\p{ASCII} regex类。例如,

myString = Normalizer.normalize(myString, Normalizer.Form.NFD).replaceAll("[^a-zA-Z]", ""); 

将第一分解重音字符像é两部分e + combining ´(正常形式d),然后将正则表达式将删除不是ASCII A..Z或A ... Z的任何字符。

0

java中的默认字符集是unicode(utf-8),下面的代码使用unicode表示字符并检查字符的unicode是否为特殊字符; 下面给出的解决方案的时间复杂度= O(n);

public class RemoveSpecialCharacters { 

/** 
* @param args the command line arguments 
*/ 

private static boolean isSpecialCharacter(int b) 
{ 
    if((b>=32 && b<=47)||(b>=58 && b<=64)||(b>=91 && b<=96) ||(b>=123 && b<=126)||b>126) 
     return true; 
    return false; 


} 
public static String removeSpecialCharacters(String a) 
{ 
    StringBuffer s=new StringBuffer(a); 


    int lenvar=s.length(); 
    String myString=""; 
    for(int i=0;i<lenvar;i++) 
    { 


     if(!isSpecialCharacter(s.charAt(i))) 
     { 
      myString+=s.charAt(i); 


     } 

    } 
    return myString; 


} 


public static void main(String[] args) { 
    System.out.println(removeSpecialCharacters("fleCKHE)_+_+")); 



} 


} 

O/P:fleCKHE

相关问题