【问题标题】:Java - replacing word.charAt(i) with word.charAt(i+1) and making word.charAt(i+1) = 'A'Java - 用 word.charAt(i+1) 替换 word.charAt(i) 并使 word.charAt(i+1) = 'A'
【发布时间】:2014-08-29 02:03:33
【问题描述】:

我需要查看数组中的每个单词,所以我创建了一个 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);
}

unchangedFileInput 是一个具有以下值的数组:

AVACADO
CHICKEN 
BACON 
AARDVARK

这是最终结果的样子:

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

【问题讨论】:

  • 你还没有说明问题是什么。

标签: java replace charat


【解决方案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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      使用此代码

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

      您将在字符串末尾收到 IndexOutOfBoundsException。

      如果你说的是IndexOutOfBoundsException 错误!!

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

      【讨论】:

      • 嘿,我的 DVer,为什么是 DV?
      • 如果你说的是我建议的 IndexOutOfBoundsException 错误,那么试试v &lt; word.length() - 1;
      猜你喜欢
      • 1970-01-01
      • 2015-08-26
      • 2012-01-13
      • 1970-01-01
      • 2015-08-17
      • 2015-05-24
      • 1970-01-01
      • 2014-02-22
      • 2014-12-29
      相关资源
      最近更新 更多