我正在用Java构建一个简单的程序,用字符串查找字母并用数字替换它们,但我找不到能够检查确切特定字符的方法。一般来说,有很多数字和字母。
正如我的for循环现在所说,它只是替换了所有地方的字母,无论它是否在开始和结束指定的范围内。
任何帮助都将不胜感激。
String str = "A.A.A.A.A.A.A.A";
int start = 3;
int end = 9;
for (int i = start; i < end; i++) {
if (Character.isLetter(str.charAt(i)) {
str = str.replaceAll("A", "9");
return str;
预期产出:
A.A.9.9.9.A.A.A
实际输出:
9.9.9.9.9.9.9.9
答案 0 :(得分:3)
在您的代码中,您有
str = str.replaceAll("A", "9");
这会将所有A
替换为9
而不是你的方法,你应该
1.将字符串转换为char数组
char[] charArray = str.toCharArray();
2.然后用数字
替换每个出现的字符if (Character.isLetter(charArray[i])){
//Character Found
charArray[i] = '9';
}
3。使用
将其转换回字符串str = String.valueOf(charArray);
修改后的代码:
String str = "A.A.A.A.A.A.A.A";
int start = 3;
int end = 9;
//Converting String to char array
char[] charArray = str.toCharArray();
for (int i = start; i < end; i++) {
if (Character.isLetter(charArray[i])){
//Character Found
charArray[i] = '9';
}
}
//Converting Back to String
str = String.valueOf(charArray);
System.out.println(charArray);
System.out.println(str);
答案 1 :(得分:1)
比较字符相等性,然后使用字符串构建器替换指定的字符
//Use of StringBuffer preferred over String as String are immutable
StringBuilder sb = new StringBuilder(str);
// -1 to start as index start from 0
for (int i = start-1; i < end; i++) {
char currentChar = currentString.charAt(i);
if (currentChar == "A") {
sb.setCharAt(i, '9');
}
}
return sb.toString();
答案 2 :(得分:1)
我这样做。剪掉字符串以隔离你想要作用的部分,将它们替换为一起重新拼接:
String str = "A.A.A.A.A.A.A.A";
int startIndex = 3;
int endIndex = 9;
String beginning = str.substring(0, startIndex);
String middle = str.substring(startIndex, endIndex);
String end = str.substring(endIndex);
middle = middle.replaceAll("A", "9");
String result = beginning + middle + end;
System.out.println(result);
打印出来:
A.A.9.9.9.A.A.A
修改强>
根据评论中的建议,您可以在一行中完成
String str = "A.A.A.A.A.A.A.A";
int startIndex = 3;
int endIndex = 9;
String result =
str.substring(0, startIndex) +
str.substring(startIndex, endIndex).replaceAll("A", "9") +
str.substring(endIndex);
答案 3 :(得分:0)
以下是使用子字符串的示例,让您选择要测试的字符串的哪个部分
int start = 3;
int end = 9;
String str = "A.A.A.A.A.A.A.A";
String startStr = str.substring(0,start);
String endStr = str.substring(end);
String newStr="";
char temp=' ';
for (int i = start; i < end; i++) {
temp = str.charAt(i);
if (temp=='A')
newStr+="9";
else
newStr += temp;
}
return(startStr + newStr + endStr);
答案 4 :(得分:0)
您正在替换字符串中找到的所有匹配项,而不指定需要替换的索引。
使用 StringBuffer replace
方法,如下所示:
public static void main(String[] args) {
String str = "AAAAAAAA";
int start = 3;
int end = 9;
str = replaceBetweenIndexes(str, start, end, "9"); // AAA999AA
str = replaceBetweenIndexes("ABCD6EFG", start, end, "3"); // ABC363FG
}
public static String replaceBetweenIndexes(String str, int start, int end, String replaceWith) {
StringBuffer strBuf = new StringBuffer(str);
for (int i = start; i < end; i++) {
if (Character.isLetter(strBuf.charAt(i)) {
strBuf.replace(i, i+1, replaceWith);
}
}
return strBuf.toString();
}