0

我需要查看数组中的每个单词,所以我制作了一个for loopwith array[i]equaling String word,然后我制作了另一个for loop带有一个if statementthat is changed word.charAt(i)withword.charAt(i+1)和changes 的单词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);
}

未更改的FileInput 是一个具有以下值的数组:

AVACADO
CHICKEN 
BACON 
AARDVARK

最终结果应该是这样的:

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

3 回答 3

1

您需要先检查您是否没有超出数组限制。我创建了一个测试框架,

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

然后将您的代码包装在一个方法中(并且刚刚创建了String一个StringBuilder删除数组转换的新方法),

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
于 2014-08-29T03:40:39.207 回答
0

为了达到您想要的效果,您需要从单词的末尾开始迭代,否则,当您将“A”与以下字符交换时,您将在下一次迭代中再次获得“A”。如果你从头开始,你只会击中每个“A”一次。

于 2014-08-29T14:00:55.433 回答
-1

使用此代码

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

您将在字符串的末尾得到一个 IndexOutOfBoundsException。

如果你在谈论IndexOutOfBoundsException错误!

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

于 2014-08-29T02:06:43.180 回答