1

我正在尝试用某些模式替换字符串“abc”:

当'a'替换为'b',当'b'替换为'c',当'c'替换为'a'。

我现在的代码是:

String alp = "abc";
String alteredAlp = "";
char [] charAlp = alp.toLowerCase().toCharArray();

for (int i = 0; i < charAlp.length() - 1; i++)
{
    if(charAlp[i] == 'a')
        alteredAlp += 'b';
    else if(charAlp[i] == 'b')
        alteredAlp += 'c';
    else if(charAlp[i] == 'c')
        alteredAlp += 'a';
}

我尝试使用“replaceAll”,但在第一次迭代后遇到了几个问题。

关于如何使它变得更好的任何想法?提前致谢!

4

4 回答 4

5

没有像length()a这样的方法char[]。将其更改为charAlp.length

接下来,更改charAlp.length - 1charAlp.length,您的代码将起作用。

相反,你可以这样做:(没有额外的字符串)

for (int i = 0; i < charAlp.length ; i++)
{
   if(charAlp[i] == 'a')
    charAlp[i]= 'b';
   else if(charAlp[i] == 'b')
    charAlp[i]= 'c';
   else if(charAlp[i] == 'c')
    charAlp[i]= 'a';
}
System.out.println(charAlp);

现在,您更改charAlp“bca”而不是“abc”(如您所愿)

于 2013-03-12T06:44:53.770 回答
1

更通用的方式:

字母表的定义必须没有间隙!

但也可以是“abcdefgh”:)

public class CharObfuscator {

    public static final String ALPHABET = "abc";

    public static String obfuscate(String obfuscateThis) {

        char bottomLevel = ALPHABET.charAt(0); // its an 'a' (int 97)
        char topLevel = ALPHABET.charAt(ALPHABET.length() - 1); // its an 'c' (int 99)

        StringBuilder stringBuilder = new StringBuilder();
        for (char character : obfuscateThis.toLowerCase().toCharArray()) {
            if ((character - bottomLevel + 1) % (topLevel - bottomLevel + 1) != 0) {
                stringBuilder.append(++character);
            } else {
                stringBuilder.append(bottomLevel);
            }
        }

        return stringBuilder.toString();
    }

    public static void main(String[] args) {
        System.out.println(obfuscate("abccbaaabbcc"));
    }

}

结果:

bcaacbbbccaa
于 2013-03-12T07:43:25.703 回答
0
public static void main(String[] args) {
    String alp = "abc";
    String alteredAlp = "";
    for(int i=0; i<alp.length(); i++){
        if(alp.charAt(i)=='a')
            alteredAlp=alteredAlp + 'b';
        else if(alp.charAt(i)=='b')
            alteredAlp = alteredAlp+'c';
        else if(alp.charAt(i)=='c')
            alteredAlp=alteredAlp+'a';

    }
    System.out.println(alteredAlp);
}

试试这个:无需创建字符数组。

输出:

bca
于 2013-03-12T06:50:41.843 回答
0

您也可以使用 StringBuilder ,如下所示:

public class CharReplace {

    public static void main(String[] args) {
        String alp = "abc";
        StringBuilder alteredAlp = new StringBuilder();

        for (int i = 0; i < alp.length(); i++) {
            switch(alp.charAt(i)) {
                case 'a':
                    alteredAlp.append('b');
                    break;
                case 'b':
                    alteredAlp.append('c');
                    break;
                case 'c':
                    alteredAlp.append('a');
                    break;
            }
        }

        System.out.println(alteredAlp.toString());
    }
}
于 2013-03-12T06:58:45.263 回答