Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将一个字符串中的字符替换为另一个字符串中的字符_Android - Fatal编程技术网

Android 将一个字符串中的字符替换为另一个字符串中的字符

Android 将一个字符串中的字符替换为另一个字符串中的字符,android,Android,我试图将一个字符串中的字符换成另一个字符串中的字符(就像人们小时候使用的简单字母偏移代码),我使用的代码是 public void convertMe(){ //lets convert the text rInput = etrInput.getText().toString(); //lets extract the input characters to a chararray char[] inputArray =

我试图将一个字符串中的字符换成另一个字符串中的字符(就像人们小时候使用的简单字母偏移代码),我使用的代码是

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

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

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

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

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

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

消色差字中的第五个字母是m(假设从0开始计数)。被替换的5501的结果应为MMAC

谢谢,


Andy您的
数字数组是否比
输入数组

要防止此错误,请执行以下操作:

 for (int i=0; i<inputArray.length; i++){
     if(i>= numbersArray.length){
     // Log exception
     return;
     }
 rResult = rNumbers.replace(numbersArray[i], inputArray[i]);
 }
for(int i=0;i=numbersArray.length){
//日志异常
返回;
}
rResult=rNumbers.replace(numbersArray[i],inputArray[i]);
}
//根据您的问题修改: 看起来你不想实现一个caesar chiffre,我会通过一个字符哈希图来实现这一点,看看下面的伪代码:

// 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]
}
//准备发动机
//执行器
HashMap字典=新的HashMap;
for(int i=0;i=numbersArray.length){
//日志异常
返回;
}
dictionary.put(numbersArray[i],inputArray[i]);
}
//施展魔法
公共字符串加密(字符串输入){
for(int i=0;i
您将在google上找到复制粘贴就绪的实现

编辑2: 我希望我明白你的意思。 动态实现

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;
 }
公共字符串转换器(字符串编码){
//让我们转换文本
字符串rInput=“消色差”;
//让我们将输入字符提取到字符数组
char[]inputArray=rInput.toCharArray();
//让我们把这些数字做成一个字符串
字符串rNumbers=“0123456789”;
//让我们提取它们并将它们放置在字符阵列中
char[]numbersArray=rNumbers.toCharArray();

对于(int i=0;iMy猜测是
numbersArray
inputArray
短。由于您正在使用
inputArray
的长度进行循环,如果
numberArray
的长度较短,则访问无效位置,导致
arrayindexoutofboundseceptions
。请尝试打印两个数组的长度并比较..
inputArray
的大小可能大于
numbersaray
,在这种情况下
numbersaray[i]
可能超出范围。谢谢,您的权利,它们的长度不同…问题已被编辑以反映后续问题是否有人能帮助我使此代码正常工作?谢谢,但我想我需要一个简单的替换密码,而不是已停止的密码。我已更新我的问题,以给出我预期输出的示例。我仍在努力了解如何实现替换。感谢更新,但我不确定我是否描述了我想要实现的目标。我将再次编辑该问题。感谢更新,但我不确定我是否描述了我想要实现的目标。我将再次编辑该问题。我已尝试了您的更新,但其行为与我的c相同原始问题中的ode。如果字符串rNumbers小于rInput数组,则应用程序崩溃。如果不是,则编码的唯一字符是通过数组循环的最后一个字符
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;
 }