Javaの大海原をじゃばじゃばと

勉強メモとか雑記です

勉強メモ@プロJava/その10

第13章 処理の難しさの段階

「プロになるJava」より gihyo.jp

13.1.2 隠れた状態を扱うループ

練習問題

1.受け取った文字列のアルファベットを、最初は小文字で出力し、0を受け取ったら次からのアルファベットは大文字に、1を受け取ったら次からのアルファベットを小文字で出力してみましょう。
例:aa0bcd1efg1gg0abc➡aaBCDefgggABC

2.文字列を受け取って、数字以外はそのまま出力し、数字が来たら直前の文字をその数字に1を足した文字数分出力してください。
例:ab0c1ba2bc9cd1➡abbcccbaaaabccccccccccccddd

src/main/java/projava/LoopExercise2.java

package projava;

public class LoopExercise2 {
    public static void main(String[] args) {
        System.out.println("--練習問題1:受け取った文字列のアルファベットを、最初は小文字で出力し、" + "\n" + "\t"
                + "0を受け取ったら次からのアルファベットは大文字に、" + "\n" + "\t"
                + "1を受け取ったら次からのアルファベットを小文字で出力--");
        caseSwitch("aa0bcd1efg1gg0abc");
        System.out.println("");
        System.out.println("--練習問題2:文字列を受け取って、数字以外はそのまま出力し、" + "\n" + "\t"
                + "数字が来たら直前の文字をその数字に1を足した文字数分出力--");
        expandPressedData("ab0c1ba2bc9cd1");
    }

    //練習問題1 初め小文字、0きたら以降大文字、1きたら以降小文字
    public static void caseSwitch(String data){
        boolean isBigCase = false;
        var builder = new StringBuilder();
        for(char ch : data.toCharArray()){
            if (ch == '0' || ch == '1'){
                isBigCase = ch == '0' ? true : false;
                continue;
            }
            if(isBigCase){
                ch = Character.toUpperCase(ch);
            }
            builder.append(ch);
        }
        var result = builder.toString();
        System.out.println(data);
        System.out.println(result);
    }

    //練習問題2 圧縮された文字列を展開
    public static void expandPressedData(String data){
        var builder = new StringBuilder();
        char prev = 0;
        for (char ch : data.toCharArray()){
            if(Character.isDigit(ch)){
                String s = String.valueOf(prev).repeat(Character.getNumericValue(ch) + 1);
                builder.append(s);
                prev = 0;
            }else{
                builder.append(ch);
                prev = ch;
            }
        }
        var result = builder.toString();
        System.out.println(data);
        System.out.println(result);
    }
}

▼コンソール

うむ!ひとまず「こうなってほしい」ができたはず!
昨日よりちょっとだけコードの組み立てが速くできた気がする( ^ω^ )ただの願望か?笑
ぬ〜ただやっぱもっときれいに滑らかに書けるようになりたいのお〜!!!