簡體   English   中英

Java-用word.charAt(i + 1)替換word.charAt(i)並使word.charAt(i + 1)='A'

[英]Java - replacing word.charAt(i) with word.charAt(i+1) and making word.charAt(i+1) = 'A'

我需要看看在陣列中的每個單詞,所以做了一個for looparray[i]等於String word ,然后我又for loop具有一個if statement即改變word.charAt(i)word.charAt(i+1)並更改word.charAt(i+1) = 'A'

目的是通過檢查i是否等於'A',然后通過i+1切換位置來“加密”單詞。

這是我的代碼:

for(int i = 0; i < unchangedFileInput.length; i++) {
    String word = unchangedFileInput[i];
    for(int v = 0; v < word.length();v++) {
        if (word.charAt(v) == 'A'
                && word.charAt(v+1) != 'A' 
                && word.length() > 1) {
            char[] mywordChars = word.toCharArray();
            temp = mywordChars[v+1];
            mywordChars[v] = mywordChars[v+1];
            mywordChars[v+1] = 'A';
            word = String.valueOf(mywordChars);
        } else {
            System.out.println(word);
        }
    }
    System.out.println(word);
}

unlimitedFileInput是一個數組,其值為:

AVACADO
CHICKEN 
BACON 
AARDVARK

最終結果應如下所示:

AVACADO = VACADAO 
CHICKEN = UNCHANGED 
BACON = BCAON 
AARDVARK = ARADVRAK 
NAAN = NANA

您需要先檢查是否沒有超出數組限制。 我創建了一個測試框架,

public static void main(String[] args) {
    String[] unchangedFileInput = { "AVACADO", "CHICKEN", "BACON",
            "AARDVARK", "NAAN" };
    String[] changedFileInput = new String[unchangedFileInput.length];
    for (int i = 0; i < unchangedFileInput.length; i++) {
        changedFileInput[i] = transformName(unchangedFileInput[i]);
        System.out.printf("%s = %s%n", unchangedFileInput[i],
                changedFileInput[i]);
    }
}

然后將您的代碼包裝到一個方法中(並使用StringBuilder創建了一個新的String ,刪除了數組轉換),

private static String transformName(String in) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0, len = in.length(); i < len; i++) {
        char ch = in.charAt(i);
        if (ch == 'A') {
            if (i + 1 < in.length() && in.charAt(i + 1) != 'A') {
                sb.append(in.charAt(i + 1));
                i++;
            }
        }
        sb.append(ch);
    }
    return sb.toString();
}

我得到了您要求的輸出,

AVACADO = VACADAO
CHICKEN = CHICKEN
BACON = BCAON
AARDVARK = ARADVRAK
NAAN = NANA

為了實現所需的功能,您需要從單詞的末尾到開頭開始迭代,否則,當將“ A”替換為以下字符時,在下一個迭代中將再次具有“ A”。 如果從頭開始,則只會打一次每個“ A”。

使用此代碼

for(int v = 0; v < word.length();v++) {
                if (word.charAt(v) == 'A' && word.charAt(v+1)

您將在String的末尾獲得IndexOutOfBoundsException。

如果您正在談論IndexOutOfBoundsException錯誤!

我建議v < word.length() - 1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM