因此,我正在尝试以下挑战: 使用Java语言,让函件LetterChanges(str)接受要传递的str参数,并使用以下算法对其进行修改。用字母后面的字母替换字符串中的每个字母(即c变成d,z变成a)。然后在此新字符串(a,e,i,o,u)中将每个元音大写,最后返回此修改后的字符串。
这是我的代码
class LetterChange {
public static String LetterChanges(String str) {
String alphabet = "AbcdEfghIjklmnOpqrstUvwxyz";
char currentChar,letter;
int i = 0;
while (i < str.length())
{
currentChar = str.charAt(i);
for(int x = 0; x < alphabet.length(); x++)
{
letter = alphabet.charAt(x);
if (currentChar == letter){
str = str.replace(currentChar,alphabet.charAt(x+1));
i++;
}
}
}
当我运行它时,它将返回字符串+1字母中的最后一个字符。例如,如果我要运行“ bcd”,它将返回“ EEE”。我不明白为什么它用最后一个字符的循环结果替换所有字符。
答案 0 :(得分:0)
此解决方案有帮助吗?
public static String letterChanges(String str) {
String alphabet = "AbcdEfghIjklmnOpqrstUvwxyz";
StringBuilder stringBuilder = new StringBuilder();
for (char letter : str.toCharArray()) {
if (alphabet.contains(Character.toString(letter))) {
int index = alphabet.indexOf(letter) + 1;
if (index >= 26) {
index = 0;
}
stringBuilder.append(alphabet.charAt(index));
}
}
return stringBuilder.toString();
}
以前的解决方案很难遵循,因此很难解释为什么没有调试就无法解决问题的原因。使用for-each循环遍历str参数并使用Java提供的方法(如.indexOf和.charAt)查找匹配项会更容易。
此外,Java使用小写驼峰方法命名,用letterChanges代替LetterChanges:)
如果您有任何疑问,请告诉我。
答案 1 :(得分:0)
第一次进入循环时
"bcd"--> "ccd"
现在,str.replace
将在下一回合中将其转换为“ ddd”,然后变为“ EEE”。
也就是说,替换将替换每回合中的所有匹配项。
的确,将来在IDE中对其进行调试将为您提供帮助! 另外,如果您的字符串中有一个小写的元音怎么办?
public class Alphabet {
public static String LetterChanges(String str) {
String alphabet = "AbcdEfghIjklmnOpqrstUvwxyz";
char[] string = str.toLowerCase().toCharArray();
for (int i=0; i < string.length; i++) {
char d = alphabet.charAt(((alphabet.toLowerCase().indexOf(string[i]))+1) % 26);
string[i]=d;
}
return new String(string);
}
public static void main(String[] args) {
System.out.println(Alphabet.LetterChanges("aabb"));
}
}
alphabet.charAt(
(((alphabet.toLowerCase()。indexOf(string [i]))
+1)%26)
1)在输入和字符串映射上使用toLowerCase消除大小写问题
2)在字符串映射“字母”中的索引+1处找到字符,并使用将z取为a的模数将其视为圆形缓冲区。
索引25(z)+ 1 == 26-> 0(A),因为26是0 mod 26,而索引0(A)+ 1 = 1-> 1 mod26。只需要将z包装到A同时不更改其他25个索引,并且比使用“ if”语句进行分支更有效。
答案 2 :(得分:0)
之所以得到该结果,是因为每次替换都需要重新设置输入字符串。我建议您: