[英]letter change, what am I doing wrong?
因此,我嘗試以下挑戰:使用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”。 我不明白為什么它用最后一個字符的循環結果替換所有字符。
此解決方案有幫助嗎?
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 :)
如果您有任何疑問,請告訴我。
當您第一次經歷循環時,
"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(字符串[I]))
+1)%26)
1)在輸入和字符串映射上使用toLowerCase消除大小寫問題
2)在字符串映射“ alphabet”的index + 1處找到字符,並使用將z取為a的模數將其視為循環緩沖區。
索引25(z)+ 1 == 26-> 0(A),因為26是0 mod 26,而索引0(A)+ 1 = 1-> 1 mod26。只需要將z包裝到A同時不更改其他25個索引,並且比使用“ if”語句進行分支更有效。
之所以得到該結果,是因為每次替換都需要重新設置輸入字符串。 我推薦你:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.