繁体   English   中英

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

[英]How to check if character at current index in for loop is a specific character (e.g. the letter A, the number 2, etc)?

我正在用Java构建一个简单的程序,该程序可以找到字符串中的字母并将其替换为数字,但是我很难找到一种方法来检查确切的特定字符。 一般来说,数字和字母都有很多。

正如我的for循环所代表的那样,无论它是否在startend指定的范围内,它都将在各处替换该字母。

任何帮助,将不胜感激。

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;

预期产量:

AA9.9.9.AAA

实际输出:

9.9.9.9.9.9.9.9

在您的代码中,您有

str = str.replaceAll("A", "9");

这将替换所有出现的A9

而不是您的方法,您应该

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);

比较字符是否相等,然后使用字符串生成器替换指定的字符

//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(); 

我会那样做。 剪下绳子以隔离要作用的部分,然后将其全部重新缝合在一起:

    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);

这是一个使用子字符串的示例,可让您选择要测试的字符串的哪一部分

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);

您将替换字符串中找到的所有匹配项,而不是指定需要替换的索引。

使用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(); 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM