[Java] indexOf(), lastIndexOf(), substring() 사용하여 문자열 뽑기

JTI·2022년 12월 3일
0

📌 Code list

목록 보기
32/55
post-thumbnail

String의 아래 메서드를 활용해서 주석처럼 출력하는 코드를 완성 하시오.
단, indexOf(), lastIndexOf(),substring() 사용

✏️ 재귀호출을 이용한 풀이

class Homework {
    public static void answer1(String str) {
		/*
			태산이
			태산이 높다하되
			태산이 높다하되 하늘
			태산이 높다하되 하늘 아래
			태산이 높다하되 하늘 아래 뫼이로다.
		*/
        int idx = str.lastIndexOf(" "); // 14
        if(idx != -1) {
            answer1(str.substring(0, idx)); // 태산이 높다하되 하늘 아래
        }
        System.out.println(str);
    }
    
    public static void answer2(String str) {
		/*
			뫼이로다.
			아래 뫼이로다.
			하늘 아래 뫼이로다.
			높다하되 하늘 아래 뫼이로다.
			태산이 높다하되 하늘 아래 뫼이로다.
		*/
        int idx = str.indexOf(" "); // 3
        if(idx != -1) {
            answer2(str.substring(idx + 1)); // 높다하되 하늘 아래 뫼이로다.
        }
        System.out.println(str);
    }
    
    public static void answer3(String str) {
		/*
			[태산이 높다하되 하늘 아래 뫼이로다.]
			태산이
			높다하되
			하늘
			아래
			뫼이로다.
		*/
        int idx = str.indexOf(" "); // 4 / 4 / 2
        if(idx != -1){
            System.out.println(str.substring(0, idx)); // 태산이 / 높다하되 / 하늘
            answer3(str.substring(idx + 1)); // 높다하되 하늘 아래 뫼이로다. / 하늘 아래 뫼이로다.
        } else {
            System.out.println(str);
        }

    }
    
    public static void answer4(String str) {
		/*
		    [태산이 높다하되 하늘 아래 뫼이로다.]
			뫼이로다.
			아래
			하늘
			높다하되
			태산이
		*/
        int idx = str.lastIndexOf(" "); //태산이
        if(idx != -1) {
            System.out.println(str.substring(idx + 1));
            answer4(str.substring(0, idx)); // 태산이 높다하되
        } else {
            System.out.println(str); // 태산이
        }
    }
    
    public static void main(String[] args) {
        String str = "태산이 높다하되 하늘 아래 뫼이로다.";
        answer1(str);
        System.out.println();
        answer2(str);
        System.out.println();
        answer3(str);
        System.out.println();
        answer4(str);
    }
}

✏️ 반복문을 이용한 풀이

/*
	String의 아래 메서드를 활용해서 주석처럼 출력하는 코드를 완성 하시오.
	단, indexOf, lastIndexOf,substring 사용
*/
class Homework {
    public static void answer1(String str) {
		/*
			태산이
			태산이 높다하되
			태산이 높다하되 하늘
			태산이 높다하되 하늘 아래
			태산이 높다하되 하늘 아래 뫼이로다.
		*/
        boolean flag = true;
        int idx = 0;
        while(flag) {
            idx = str.indexOf(" ", idx);
            if(idx == -1) {
                idx = str.length();
                flag = false;
            }
            System.out.println(str.substring(0, idx));
            idx++;
        }
    }
    public static void answer2(String str) {
		/*
			뫼이로다.
			아래 뫼이로다.
			하늘 아래 뫼이로다.
			높다하되 하늘 아래 뫼이로다.
			태산이 높다하되 하늘 아래 뫼이로다.
		*/
        boolean flag = true;
        int idx = str.length() - 1;
        while(flag) {
            idx = str.lastIndexOf(" ", idx);
            if(idx == -1) {
                idx = 0;
                flag = false;
            } else {
                idx++;
            }
            System.out.println(str.substring(idx));
            idx -= 2;
        }
    }
    public static void answer3(String str) {
		/*
		[태산이 높다하되 하늘 아래 뫼이로다.]
			태산이
			높다하되
			하늘
			아래
			뫼이로다.
		*/
        int start = 0;
        int end = 0;
        boolean flag = true;

        while(flag) {
            end = str.indexOf(" ", start); // end: 3
            if(end == -1) {
                flag = false;
                end = str.length();
            }
            System.out.println(str.substring(start, end)); //0, 4
            start = end + 1; // 5
        }
    }
    public static void answer4(String str) {
		/*
		[태산이 높다하되 하늘 아래 뫼이로다.]
			뫼이로다.
			아래
			하늘
			높다하되
			태산이
		*/
        int start = str.length(); 
        int end = str.length(); 
        boolean flag = true;

        while(flag) {
            start = str.lastIndexOf(" ", start - 1); // start: 14
            if(start == -1) {
                flag = false;
            }
            System.out.println(str.substring(start + 1, end)); // 15, 20
            end = start; 
            start--; 
        }
    }
    public static void main(String[] args) {
        String str = "태산이 높다하되 하늘 아래 뫼이로다.";
        answer1(str);
        System.out.println();
        answer2(str);
        System.out.println();
        answer3(str);
        System.out.println();
        answer4(str);
    }
}
profile
Fill in my own colorful colors🎨

0개의 댓글