我正在尝试将一个字符串中的字符换成另一个字符串中的字符(例如人们小时候使用的简单字母偏移代码),我使用的代码是
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。
谢谢;
安迪