字符串替换错误:id.replace(ch,“”)无法正常工作

时间:2017-05-10 03:30:22

标签: java string replace str-replace

我正在尝试替换字符串中的字符

for (String word : stringArray){
    int k = 33;
    char d ="";
    while (k < 64){
        char c = k;
        word = word.replace(c, ""); // THIS LINE GIVES AN ERROR
        k++;
    }
}

我试图摆脱ASCII id 32(!)和ASCII id 64(@)之间的所有非字母字符,包括在内。我使用stringid.replace(char, char)作为suggested here

然而,在replace的第二个参数中的""被视为Eclipse中的一个字符串,它将错误称为“类型不匹配”(因为replace需要两个都是字符的参数)。

我尝试过''而不是"",但这似乎无法解决问题。我该怎么办?提前谢谢。

编辑:将word.replace(c, "");更改为word = word.replace(c,"");。感谢评论者指出这一点。但是,问题仍然存在。

3 个答案:

答案 0 :(得分:2)

您必须更改相当多的代码才能使其正常工作:

for (int i = 0; i < stringArray.length; i++) {
    int k = 33;
    while (k < 64){
        stringArray[i] = stringArray[i].replace("" + k, "");
        k++;
    }

}

关键点是:

  • 字符串是不可变的,因此如果您修改它们,则必须重新分配它们
  • 如果在for循环中修改迭代变量,则不会更改数组中的原始值,还必须在数组内重新分配
  • 没有“空字符”,因此替换必须在字符串之间

答案 1 :(得分:1)

为什么不将所有想要替换的字符放在单独的字符串中并使用正则表达式将它们全部替换为字符串?

String charsToBeReplaced = "[!\"#$%&'()*+,-.\\/0123456789:;<=>?@]"; //your ASCII 33 to 64 characters... notice that forward slash and double quotes is escaped here

for (int i=0; i<stringArray.length; i++){
    stringArray[i] = stringArray[i].replaceAll(charsToBeReplaced, "");
}

DEMO

答案 2 :(得分:1)

使用正则表达式提出另一个答案:

Pattern p = Pattern.compile("[\\x21-\\x40]");
for (int i=0; i<stringArray.length; i++){
    stringArray[i] = p.matcher(stringArray[i]).replaceAll("");
}

这可能比Raman Sahasi's answer更有效,因为我们只需要编译一次模式。