0

我正在尝试将一个字符串中的字符换成另一个字符串中的字符(例如人们小时候使用的简单字母偏移代码),我使用的代码是

   public void convertMe(){
        //lets convert the text 
        rInput = etrInput.getText().toString();

        //lets extract the input characters to a chararray
        char[] inputArray = rInput.toCharArray();

        //lets get the numbers and make them a string
        rNumbers = etrNumbers.getText().toString();

        //lets extract them and place them in an chararray
        char[] numbersArray = rNumbers.toCharArray();

     for (int i=0; i<inputArray.length; i++){
     rResult = rNumbers.replace(numbersArray[i], inputArray[i]);
     }

    }

当我运行代码时,我不断收到 ArrayIndexOutOfBoundsExceptions,但我真的不明白为什么会发生这种情况(因为我正在运行的循环在 inputArray.length 的数组范围内)。

编辑2:

澄清我上面的代码的行为:如果字符串 rInput 小于 rNumbers 数组,则应用程序崩溃。如果不是,那么唯一被编码的字符是在数组中循环的最后一个字符。

我希望能够“编码”数组中的所有字符,也能够编码任意数量的字符,不限于匹配 numbersArray 的长度。

EDIT1:我错过了数组长度不同的事实。所以重新表述这个问题:

如何处理不同长度的数组来替换值?

rInput 必须是 10 个字符的单词 rNumbers 可以是任意长度的字符串,但只能包含数字。

结果应该是使用 rInput charArray 中的字母简单地对数字进行“编码”:

ACHROMATIC
0123456789

所以编码 5501 应该给出答案 MMAC,或者 5512345 应该给出 MMCHROM。

编辑:尝试改进我的描述:

用户输入一个 10 个字符的单词,没有 2 个字符相同(如示例消色差)

然后用户可以输入一系列数字。(5501)

然后替换应该取用户输入的每个数字的 int 值,从第一个单词中查找该值并替换该字符:

achromatic 一词中的第五个字母是 m(假设您从 0 开始计数)。5501被替换的结果应该是MMAC。

谢谢;

安迪

4

1 回答 1

2

你的numbersArray比你的矮inputArray吗?

为防止此错误:

 for (int i=0; i<inputArray.length; i++){
     if(i>= numbersArray.length){
     // Log exception
     return;
     }
 rResult = rNumbers.replace(numbersArray[i], inputArray[i]);
 }

//根据您的问题进行编辑更改:看起来您不想实现凯撒雪佛兰,我会使用字符的 HashMap 来实现这一点,请查看以下伪代码:

// prepare the engine
// ctor
HashMap<char,char> dictionary = new HashMap<char,char>;
     for (int i=0; i<inputArray.length; i++){
         if(i>= numbersArray.length){
         // Log exception
         return;
         }
     dictionary.put(numbersArray[i], inputArray[i]);
     }

// do the magic
public String encrypt(String input){
for(int i = 0; i < input.length; i++){
input.setCharAt(i,dictionary.get(input[i]
}

你会在谷歌上找到复制粘贴就绪的实现。

EDIT2:我希望我明白你的意思。即时实施

public String convertMe(String encode){
    //lets convert the text 
 String   rInput = "ACHROMATIC";

//lets extract the input characters to a chararray
char[] inputArray = rInput.toCharArray();

    //lets get the numbers and make them a string
   String rNumbers = "0123456789" ;

//lets extract them and place them in an chararray
char[] numbersArray = rNumbers.toCharArray();

 for (int i=0; i<inputArray.length; i++){
     encode = encode.replace(numbersArray[i], inputArray[i]);
 }

 return encode;
 }
于 2013-10-21T13:14:03.410 回答