亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何返回字符大小寫交替形成的字符串?

如何返回字符大小寫交替形成的字符串?

ABOUTYOU 2023-07-19 17:00:58
該方法應該返回通過交替指定字符串中的字符大小寫形成的字符串。返回字符串中的第一個字符為小寫,第二個字符為大寫,第三個字符為小寫,第四個字符為大寫,依此類推。示例:tOrOnTo。public static String alternatingCaps(String s) {    for (int i = 0; i < s.length(); i++) {        if (i % 2 == 0) {            System.out.print(Character.toUpperCase(s.charAt(i)));        } else {            System.out.print(Character.toLowerCase(s.charAt(i)));        }    }    return s;}我希望它能起作用,但它一直未能通過 JUnit 測試。
查看完整描述

5 回答

?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

IDK,為什么所有其他解決方案都錯過了一個必要條件(第一個字符必須是小寫,0%2 == 0)。您的測試代碼仍然會失敗。


正確的解決方案是,


 public static String alternatingCaps(String s) {

    StringBuilder result = new StringBuilder();

    for (int i = 0; i < s.length(); i++) {

      if (i % 2 == 0) {

        result.append(Character.toLowerCase(s.charAt(i)));

      } else {

        result.append(Character.toUpperCase(s.charAt(i)));

      }

    }

    return result.toString();

 }

PS:交換方法調用toUpperCase和toLowerCase其他答案以獲得正確的解決方案。


查看完整回答
反對 回復 2023-07-19
?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

Java 中的字符串是不可變的,因此您無法修改它。所有修改字符串的方法都會在內部創建一個新字符串并返回它。


我認為最好的解決方案是使用StringBuilder:


public static String alternatingCaps(String str) {

    StringBuilder buf = new StringBuilder(str.length());


    for (int i = 0; i < str.length(); i++) {

        char ch = str.charAt(i);

        buf.append(i % 2 == 0 ? Character.toLowerCase(ch) : Character.toUpperCase(ch));

    }


    return buf.toString();

}


查看完整回答
反對 回復 2023-07-19
?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

您可以使用數組。


public class Main

{

    public static void main(String[] args) {

        String s = alternatingCaps("toronto");

        System.out.print(s);

    }


    public static String alternatingCaps(String s) {

        char [] array = new char[s.length()];

        for (int i = 0; i < s.length(); i++) {

            if (i % 2 == 0) {

                array[i]=Character.toUpperCase(s.charAt(i));

            } else {

                array[i]=Character.toLowerCase(s.charAt(i));

            }

        }

        return String.valueOf(array); 

    }

}


查看完整回答
反對 回復 2023-07-19
?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

正如其他人所說,您實際上并沒有更改返回的值,而只是打印修改后的值。


我采取了另一種方法來演示另一種在不使用模的情況下更改每個其他值的方法:


public static String alternatingCaps(String s) {

    boolean toggle = true;

    StringBuilder sb = new StringBuilder();

    for (char c : s.toCharArray()) {

        if (toggle = !toggle) {

            sb.append(Character.toUpperCase(c));

        }

        else {

            sb.append(Character.toLowerCase(c));

        }

    }

    return sb.toString();

}

這使用StringBuilder來構建返回String,并使用String.toCharArray()增強for循環來迭代所有字符而不是索引。


我們能夠for在這里使用增強循環,因為我們改變了確定索引是奇數還是偶數的方式。我們不使用模數,而是使用在每次傳遞之間切換的值,從而有效地執行相同的操作boolean。truefalse


請注意,此方法總體上不如模方法,因為如果您想要每第三個值等,則可以輕松修改模,并且比此方法更容易閱讀。這個例子主要是為了學習其他解決問題的方法。


我還避免了三元運算符,因此更容易看到切換是如何boolean工作的,盡管可以通過使用它來進一步簡化。


查看完整回答
反對 回復 2023-07-19
?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

您不會返回已處理的String,您只是將其打印在 StdOut 上,因此輸入String不會更改并且您的 jUnit 會失敗。


這里使用 a StringBuilder,追加處理后的字符,最后String通過調用toString()上的方法返回StringBuilder。


public static String alternatingCaps(String s) {

    StringBuilder temp = new StringBuilder();

    IntStream.range(0, s.length()).forEach(idx ->{

        if (idx % 2 == 0) {

            temp.append(Character.toUpperCase(s.charAt(idx)));

        }else {

            temp.append(Character.toLowerCase(s.charAt(idx)));

        }

    });

    return temp.toString();

}

另一種使用Collectors#joiningandIntStream迭代輸入索引的方式String應用邏輯并使用以下方式收集它Collectors#joining:


public static String alternatingCaps(String s) {

    return IntStream.range(0, s.length())

           .mapToObj(idx -> String.valueOf(idx % 2 == 0 

                           ? Character.toUpperCase(s.charAt(idx)) 

                           : Character.toLowerCase(s.charAt(idx))))

           .collect(Collectors.joining(""));

}


查看完整回答
反對 回復 2023-07-19
  • 5 回答
  • 0 關注
  • 256 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號