String Replacement Error: id.replace(ch, "") not working
String Replacement Error: id.replace(ch, "") not working
我正在尝试替换字符串中的字符
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。
但是,替换的第二个参数中的 ""
在 Eclipse 中被视为字符串,这会给出错误 "type mismatch" (因为替换需要两个字符的参数)。
我试过 ''
而不是 ""
,但这似乎无法解决问题。我应该怎么办?提前致谢。
编辑:将 word.replace(c, "");
更改为 word = word.replace(c,"");
。感谢评论者指出这一点。但是,问题仍然存在。
您必须更改相当多的代码才能使其正常工作:
for (int i = 0; i < stringArray.length; i++) {
int k = 33;
while (k < 64){
stringArray[i] = stringArray[i].replace("" + k, "");
k++;
}
}
重点是:
- 字符串是不可变的,所以如果你修改它们,你必须重新分配它们
- 如果在for循环中修改迭代变量,数组中的原始值不会改变,还需要在数组中重新赋值
- 没有"empty char",所以替换必须在字符串之间
为什么不将所有要替换的字符放在一个单独的字符串中,然后使用正则表达式从字符串中全部替换它们?
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, "");
}
只是为了使用正则表达式给出另一个答案:
Pattern p = Pattern.compile("[\x21-\x40]");
for (int i=0; i<stringArray.length; i++){
stringArray[i] = p.matcher(stringArray[i]).replaceAll("");
}
这可能比 更有效,因为我们只需要编译模式一次。
我正在尝试替换字符串中的字符
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。
但是,替换的第二个参数中的 ""
在 Eclipse 中被视为字符串,这会给出错误 "type mismatch" (因为替换需要两个字符的参数)。
我试过 ''
而不是 ""
,但这似乎无法解决问题。我应该怎么办?提前致谢。
编辑:将 word.replace(c, "");
更改为 word = word.replace(c,"");
。感谢评论者指出这一点。但是,问题仍然存在。
您必须更改相当多的代码才能使其正常工作:
for (int i = 0; i < stringArray.length; i++) {
int k = 33;
while (k < 64){
stringArray[i] = stringArray[i].replace("" + k, "");
k++;
}
}
重点是:
- 字符串是不可变的,所以如果你修改它们,你必须重新分配它们
- 如果在for循环中修改迭代变量,数组中的原始值不会改变,还需要在数组中重新赋值
- 没有"empty char",所以替换必须在字符串之间
为什么不将所有要替换的字符放在一个单独的字符串中,然后使用正则表达式从字符串中全部替换它们?
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, "");
}
只是为了使用正则表达式给出另一个答案:
Pattern p = Pattern.compile("[\x21-\x40]");
for (int i=0; i<stringArray.length; i++){
stringArray[i] = p.matcher(stringArray[i]).replaceAll("");
}
这可能比