用一个字符串替换另一个字符串中的字符

时间:2013-10-21 13:11:32

标签: android

我正在尝试将一个字符串中的字符换成另一个字符串中的字符(就像人们用作孩子的简单字母偏移代码一样),我正在使用的代码是

   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的数组范围内)。

EDIT2:

澄清上面代码的行为: 如果字符串rInput小于rNumbers数组,则应用程序崩溃。如果没有,则编码的唯一字符是循环通过数组的最后一个字符。

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

EDIT1:我错过了数组长度不同的事实。所以改写这个问题:

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

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

结果应该是数字是&#34;编码&#34;简单来说,使用rInput charArray中的字母:

ACHROMATIC
0123456789

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

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

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

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

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

消色差这个词的第五个字母是m(假设你从0算起)。替换5501的结果应该是MMAC。

感谢;

安迪

1 个答案:

答案 0 :(得分: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]);
 }

//根据您的问题更改编辑: 看起来你不想实现一个凯撒chiffre,我会用Chars的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]
}

您可以在google上找到复制粘贴就绪实现。

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