2

使用下面的函数,我可以简单地删除单个特殊字符,需要从单个字符串中删除多种类型的特殊字符。

static public String replaceAll(String str, String replace, String replacement )  
{       
StringBuffer sb = new StringBuffer( str );  
int firstOccurrence = sb.toString().indexOf( replace );  

while( firstOccurrence != -1 )   
{     
sb.replace( firstOccurrence, firstOccurrence + replace.length(), replacement );  
         firstOccurrence = sb.toString().indexOf( replace );  
}  

return sb.toString();   
} 

需要这个,所以它在 jdk 1.4 以下工作,没有像 replaceAll() 这样的所有内置函数

谢谢。

4

4 回答 4

3

我要做的是删除所有特殊字符,例如控制字符、非 ASCII 特殊字符以及像这样的 ASCII 字符。

public static String stripSpecialCharacters(String str) {
   StringBuffer sb = new StringBuffer();
    for(int i=0;i<str.length();i++) {
        char ch = str.charAt(i);
        if (Character.isLetterOrDigit(ch) || Character.isSpaceChar(ch))
            sb.append(ch);
    }
    return sb.toString();
}

注意:您要避免在 StringBuffer 中创建多个字符或重新排列字符,因为在此上下文中这些操作变为 O(N^2) 操作。

于 2013-08-16T05:43:07.820 回答
2

编辑:您的问题标题说您要替换多个字符,我使用了一种简单的方法将“替换”中的多个特殊字符替换为指定字符..

编辑:

static public String replaceAll(String str, String replace, char replacement )  
{    
String T=""; 
int flag=0;  
for(int i=0;i<str.length();i++)
{
      char a=str.charAt(i);
      for(int j=0;j<replace.length();j++)
      {
          if(a==replace.charAt(j))
          flag=1;
      }
      if(flag==1)
      {
          T+=replacement;
          flag=0;
      }
      else
          T+=a;
}
return T;   
}

这应该适用于所有版本..我已经用大约 8 年前可用的 jdk 测试了这种方法..

于 2013-08-16T05:22:35.880 回答
0

这可能是您正在寻找的,假设您可以使用replaceAll您提供的功能:

static public String replaceAll(String str, String[] replace, String replacement )  
{        
    String replaced = str;
    for(int i=0; i<replace.length; i++)
    {
        replaced = replaceAll(str, replace[i], replacement);
    } 
    return replaced;
} 

编辑:我可能误解了您的问题,我以为您正在寻找一种用单个方法调用替换多个字符的方法,在这种情况下,您可以将要替换的字符数组作为该函数中的第二个参数传递。

于 2013-08-16T05:27:08.250 回答
0

你也可以试试这个。但我不确定低于jdk 1.4支持的版本toCharArray()

 public static String replaceAll(String str, String replace, String replacement )
  {
    char[] strArray =str.toCharArray();
    StringBuffer sb=new StringBuffer();
    for(int i=0;i<strArray.length;i++){
       if(strArray[i]==replace.toCharArray()[0]){
         sb.append(replacement);
       }else {
           sb.append(strArray[i]);
       }
    }
    return sb.toString();
 }
于 2013-08-16T05:55:37.267 回答