我正在尝试将一个字符串中的字符换成另一个字符串中的字符(就像人们用作孩子的简单字母偏移代码一样),我正在使用的代码是
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。
感谢;
安迪
答案 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;
}