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()하는 방법을 알아내었다.
'Coding 공부 > Java' 카테고리의 다른 글
[Java] lambda, 내장형 함수 인터페이스(Consumer, Supplier, Function, Operator), 람다식에서 지역 변수, 메소드 참조(Method Reference) (0) | 2024.03.27 |
---|---|
[Java_CodingGames] Shadows of the Knight - Episode 1 (0) | 2024.03.26 |
[Java_project] 네트워크 유저 정보 전송 및 채팅#1 (0) | 2024.03.15 |
[Java_Example] 서버 일대일 채팅 연습 문제, 수식 계산 서버 연습 문제 (0) | 2024.03.13 |
[Java_Example] 입출력 스트림과 파일 입출력 예제 풀이 (0) | 2024.03.12 |
댓글