我在替换字符串中的字符时遇到了一些麻烦。代码对于删除连字符的句点非常合适,但对于字母“e”,它会删除“test”中的“e”,并且它还会转换字符串末尾的三个“e”。有谁知道为什么会这样?
String str = "This is a test string, 12345! -12e3.0 eee";
for(int i = 0; i < str.length(); i++) {
if((str.charAt(i) == '-') && (Character.isDigit(str.charAt(i+1)))) {
str = str.replace(str.charAt(i), '*');
}
if((str.charAt(i) == 'e') && (Character.isDigit(str.charAt(i+1)))) {
str = str.replace(str.charAt(i), '*');
}
if((str.charAt(i) == '.') && (Character.isDigit(str.charAt(i+1)))) {
str = str.replace(str.charAt(i), '*');
}
}
str = str.replaceAll("[1234567890]", "*");
System.out.println(str);
答案 0 :(得分:3)
在每种情况下,if
部分只是找到是否应该替换角色......但是替换本身:
str = str.replace(str.charAt(i), '*')
...为整个字符串执行替换。
对此最简单的解决方法可能是将其转换为一个字符数组,一次替换一个字符,然后为其余字符创建一个字符串:
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length - 1; i++) {
if (chars[i] == '-' && Character.isDigit(chars[i + 1])) {
chars[i] = '*';
}
// Similarly for the other two
}
String newString = new String(chars);
或者为避免重复,请将中间部分替换为:
for (int i = 0; i < chars.length - 1; i++) {
if (Character.isDigit(chars[i + 1]) &&
(chars[i] == '-' || chars[i] == 'e' || chars[i] == '.')) {
chars[i] = '*';
}
}
答案 1 :(得分:0)
str.replace(str.charAt(i), '*');
将替换所有字符。 Javadoc
您可以使用StringBuilder替换String中的特定字符。请查看此问题和答案。