Coding 공부/Java

[Java_Example] StringBuffer 연습문제_문자열 바꾸기

CBJH 2024. 3. 21.
728x90
반응형
  • 규칙
    • love!LOVE는 love를 찾아 LOVE로 수정하라는 명령이다.
    • 규칙대로 하지 않으면  "잘못된 명령입니다!" 출력하기
    • !앞에 문자열이 수정 전에 문자열에 포함되어 있지 않으면 "찾을 수 없습니다!" 출력하기
    • 첫번째 만난 문자열만 수정한다.
    • "그만"을 입력 할 때까지 계속 실행한다.
import java.util.Scanner;

public class ex11 {
	Scanner sc = new Scanner(System.in);
	String inputString;
	
	private boolean run() {
		System.out.print("명령: ");
		inputString = sc.nextLine();
		if(inputString.equals("그만")) {
			System.out.println("종료합니다.");
			return false;
		}		
		return true;
	}
	
	public static void main(String[] args) {
		ex11 e = new ex11();
		boolean flag;		//바꿀 값이 있는지 확인하는 boolean형 변수
		String sentence = "우리는 Love Java Programing.";
		String[] sentenceArray = sentence.split(" ");
		StringBuffer resultSentence = new StringBuffer("");
		System.out.println(">>"+sentence);
		while(e.run()) {	//run 메소드를 실행("그만"을 입력하지 않으면 계속 실행)
			resultSentence.delete(0, resultSentence.length());	//resultSentence를 초기화
			flag = false;	//flag는 기본 flase로 초기화
			String[] ArrayString = e.inputString.split("!");			
			if(ArrayString.length != 2) {	//중간에 !가 없으면 배열의 크기가 1이고, !가 많으면 3이상이므로
				System.out.println("잘못된 명령입니다!");
				continue;
			}			
			for(String element : sentenceArray) {				
				if(element.equals(ArrayString[0])) {	//split()로 나누어 ! 앞의 문자열
					resultSentence.append(ArrayString[1]); //! 뒤의 문자열
					resultSentence.append(" ");	//띄어쓰기 삽입
					flag = true;	//바꾸는 문자열을 삽입하면 flag true로 반환
					continue;	//바꾸는 문자열을 append했으므로 element추가를 생략하고 다음 for문 실행
				}
				resultSentence.append(element);	//바꾸는 문자열을 삽입하지 않았으므로 element 삽입
				resultSentence.append(" ");		//띄어쓰기 삽입
			}
			if(!flag) {
				System.out.println("찾을 수 없습니다!");
				continue;
			}			
			System.out.println(resultSentence);			//flag가 true이므로 바뀐 값을 저장한 resultSentence 출력
			sentenceArray = resultSentence.toString().split(" ");	// sentenceArray를 수정한 문자열로 바꿔준다. 
		}
	}
}

 

  • main문 안에만 모든 코드를 작성하면 너무 길어져서 run() 메서드를 분리했다. (더 분리할까도 생각했지만 시간이 없어 그냥 여기까지..)
  • 파이썬에서는 replace() 내장함수로 문자열을 바꿀 수 있었는데 자바엔 따로 그런 메서드가 없어 아쉽다.
  • 규칙대로하지 않으면 ? 이라는 조건을 생각해보니 >> !로 split()했을때 문자열 배열의 크기가 2라는 것을 알아내었다.
  • !앞의 문자열이 기준 문자열에 없는 조건은 어떻게 할지 생각해보니 >> flag 변수를 사용해서 flag가 false라면 찾을 수 없고 결과물을 출력하지 않은 채 반복문을 다시 실행하도록 continue;하게 로직을 짰다.
  • 바뀐 결과물을 출력하기 위해 StringBuffer를 사용했다.
  • StringBuffer를 지우는 방법을 구글 검색으로 찾아보았고, 기준 문자열을 수정한 문자열로 바꾸기 위해 StringBuffer를 문자열로 바꾸어 다시 split()하는 방법을 알아내었다.

 

댓글