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