如何检查for循环中当前索引处的字符是否是特定字符(例如字母A,数字2等)?

时间:2018-01-26 19:46:43

标签: java java-8

我正在用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

5 个答案:

答案 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(); 
}