Java 如何从一个字符串中删除多个特殊字符,而不使用任何内置函数,如下面针对jdk 1.4的replaceAll()

Java 如何从一个字符串中删除多个特殊字符,而不使用任何内置函数,如下面针对jdk 1.4的replaceAll(),java,regex,string,replace,special-characters,Java,Regex,String,Replace,Special Characters,使用下面的函数,我可以简单地删除一个特殊字符,需要从一个字符串中删除多种类型的字符 static public String replaceAll(String str, String replace, String replacement ) { StringBuffer sb = new StringBuffer( str ); int firstOccurrence = sb.toString().indexOf( replace ); while( first

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

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();   
} 
需要这样才能在JDK1.4下工作,而不需要像replaceAll()这样的所有内置函数


谢谢。

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

编辑:

static public String replaceAll(String str、String replace、char replacement)
{    
字符串T=“”;
int标志=0;

对于(int i=0;i这可能是您正在寻找的,假设您可以使用您提供的
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;
} 
static public String replaceAll(String str,String[]replace,String replacement)
{        
字符串替换=str;

对于(int i=0;i我要做的是删除所有特殊字符,例如控制字符、非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();
}
公共静态字符串stripSpecialCharacters(字符串str){
StringBuffer sb=新的StringBuffer();

对于(inti=0;i您也可以尝试这个。但是我不确定低于
jdk1.4
的版本是否支持
tocharray()

publicstaticstringreplaceall(stringstr、stringreplace、stringreplacement)
{
char[]strArray=str.toCharArray();
StringBuffer sb=新的StringBuffer();


对于(inti=0;我能举个例子吗?在这种情况下,它不能替换所有的。实际上它是用简单的case@Juvanis不支持将1.4以下的任何内置函数用作replaAll()时没有问题。因此,情况就是这样。@Krushna OP没有提到他在使用
replaceAll()时失败
。他需要在jdk 1.4下使用此代码。
replaceAll()
从jdk 1开始支持。4@Krushna这种情况就像有一个带有数字和特殊字符的字符串,我所需要做的就是去掉这些特殊字符而不使用replaceAll()函数,因为开发环境是jdk 1.3和replaceAll()支持1.4及以上版本。字符串s=replaceAll(“m>sd>da!k”、“>”、”);这将用空字符串替换所有>,但我需要处理以删除!以及,这不起作用…:(正确,输入为字符串,但参数应为多个字符,此大小写对单字符最终字符串specialChars=“[`~!@$%^&*()”、./{}\\\\\\\\\”、./{}\\\\\\\:\“?]”有效。这可能有助于作为参数遍历每个字符并替换。好的。因此,您希望替换中的所有字符”替换为一个特定字符?我的意思是替换应该是一个字符串或一个字符?@Droido所以您很乐意保留所有其他数千个特殊字符?字符串s=replaceAll(“m>sd>da!k”、“>”、”);此行替换所有“>但是,可能会出现以下情况:一个字符串中有多个特殊字符,例如,它不会用此函数替换“!”,而是替换所有“>”在字符串中。是的,现在你猜对了!这对作为第二个字符串数组参数的多个字符有效吗?是的;你需要将每个字符作为数组中的一个单独元素传递。Peter Lawrey有一个更好的答案,如果你要使用这个函数来剥离特殊字符,我会同意他的答案。这段代码将替换所有字符特殊字符..包括“空格键”并破坏句子..我想这不合适..@Abhishek我想
Character.isSpaceChar(ch)
包括“空格键”,我应该使用哪种方法?我没有注意到isSpaceChar()…但不特别是空格键..其他字符,如句号感叹号、corpright,此程序的作用域有限..@PeterLawrey Abhishek是正确的-当提供的字符串用于例如this-
string s=stripSpecialCharacters时(“90>adb@Droido我在Java 7上获得了
90adb daskka ndk4839
。这一定是Java 1.4中的一个错误,因为文档中说
@如果字符是空格字符,则返回true
如果不需要其他空格,则可以用
ch='
替换检查。`final String specialChars=“[
~!@$%^&*”([\\+[\\\\]\\\\\\\\”,{|:\“?]”字符串s=replaceAll(“90>ADB此方法可以工作,但不会去除这些字符。当在M 1.6本身上进行检查时,这些字符是什么?+和-?没有被替换!上面的注释显示输出您不能一步完成。您没有得到正确的结果。此方法仅替换一个特殊字符。您必须逐个尝试。
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();
}
 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();
 }