簡體   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