package Main;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		System.out.println("==프로그램 시작==");
		Scanner sc = new Scanner(System.in);
		int lastArticleId = 0;
		List<Article> articles = new ArrayList<>();
		while (true) {

			System.out.print("명령어 > ");
			String command = sc.nextLine().trim();

			if (command.length() == 0) {
				System.out.println("명령어를 입력해주세요");

				continue;
			}
			if (command.equals("exit")) {
				break;
			}
			if (command.equals("article list")) {
				if (articles.size() == 0) {
					System.out.println("게시글이 없습니다");
				} else {
					System.out.println(" 번호  //  제목  ");
					for (int i = articles.size() - 1; i >= 0; i--) {
						Article article = articles.get(i);
						System.out.printf("  %d   //   %s  \n", article.id, article.title);
					}
				}
			} else if (command.equals("article write")) {
				int id = lastArticleId + 1;
				System.out.print("제목 : ");
				String title = sc.nextLine();
				System.out.print("내용 : ");
				String body = sc.nextLine();
				Article article = new Article(id, title, body);
				articles.add(article);
				System.out.printf("%d번글이 생성되었습니다\n", id);
				lastArticleId++;

			} else if (command.startsWith("article detail ")) {

				String[] cmdDiv = command.split(" "); // article detail 1

//				System.out.println(cmdDiv[0]);
//				System.out.println(cmdDiv[1]);
//				System.out.println(cmdDiv[2]);

				int id = Integer.parseInt(cmdDiv[2]);

				// article detail 1 => "1" => 1

				System.out.printf("%d번 게시물은 존재하지 않습니다\n", id);

			} else {
				System.out.println("존재하지 않는 명령어입니다");
			}

		}
		System.out.println("==프로그램 끝==");
		sc.close();
	}
}

class Article {
	int id;
	String title;
	String body;

	Article(int id, String title, String body) {
		this.id = id;
		this.title = title;
		this.body = body;
	}
}

게시물 상세보기를 구현해보자 명령어는 article detail이라 한다

스캐너 옆에 String command = sc.nextLine().trim();     trim();이라는 명령어가 하나 붙었다 문자열 command 변수에 공백이 있으면 알아서 잘라주겠단 얘기다

 

추가 된 건 명령어이므로 else if 로 틀을 비슷하게 구현해준다

 

else if(command.startWtih("article detail")){

      String[] cmdDiv = command.split(" ");

      int id = Interger.parseInt(cmdDiv[2]);

     System.out.prinf("%d번 게시물은 존재하지 않습니다\n",id);

} else {

     system.out.prtinln("존재하지 않는 명령어 입니다");

}

몇개의 키워드가 추가 되었다 'startWith' ,'split' , 'Integer.parseInt();'

사용 의도는 다음과 같다

```

-startWith ~~로 시작되는 단어가 입력 된다면?

  String[] cmdDiv = command.split(" "); << 을 이용해서 article detail ~ 을 공백을 기준 ㅁ ㅁ ㅁ 세 덩이로 나누겠단 의미다

문자열 command를 " "(공백)을 기준으로 나누어 문자열 배열(String[]) cmdDiv에 저장하는 코드입니다.

split() 메소드는 문자열을 특정 구분자(delimiter)를 기준으로 나누어 문자열 배열로 반환하는 메소드이다. 위 코드에서는 " "(공백)을 구분자로 사용하였다. 따라서, command 문자열이 " "(공백)을 포함하는 경우, split() 메소드는 해당 공백을 기준으로 문자열을 나누어 문자열 배열로 반환하게 된다.

반환된 문자열 배열은 String[] cmdDiv 변수에 저장된다. 이후 코드에서 cmdDiv 배열을 이용하여 다양한 작업을 수행할 수 있다. 예를 들어, cmdDiv[0]은 나누어진 문자열 중 첫 번째 단어를 나타내며, cmdDiv[1]은 두 번째 단어를 나타낸다다.

```

그리고 int id = Interger.parseInt(cmdDiv[2]);

```

해당 코드는 문자열 배열 cmdDiv의 세 번째 요소(cmdDiv[2])를 정수형(int)으로 변환한 후, 그 값을 변수 id에 할당하는 코드다.

Integer.parseInt() 메소드는 문자열을 정수형으로 변환하는 메소드다. 위 코드에서는 cmdDiv[2]에 저장된 문자열을 정수형으로 변환하여 id 변수에 할당한다.

예를 들어, cmdDiv[2]가 "123"과 같은 문자열을 포함하고 있다면, Integer.parseInt() 메소드는 해당 문자열을 정수형으로 변환한 후, id 변수에 123의 값이 할당된다. 만약 cmdDiv[2]가 정수로 변환할 수 없는 문자열이 포함되어 있다면, parseInt() 메소드는 NumberFormatException 예외를 발생시킨다. 이 예외는 try-catch 문을 사용하여 처리해야 한다.

```

결론은 article detail이란 코드를 사용하면 article detail로 시작하는 명령어를 공백의 기준에 따라 실행하게 되고

글 번호는 숫자로 시작할테니 ㅁ ㅁ 'ㅁ '<- 세번째에 할당되는 문자열을 숫자로 바꿔서 입력하겠단 소리다

세번째인데 cmdDiv[2] 인 이유는 배열을 생성할 땐 0,1,2,3,4,..... 으로 시작하기에 3번째 단어라면 [2]에 저장되기 때문이다.

 

마지막으로 else를 이용해 잘못 된 명령어를 고치라는 출력을 한다.

+ Recent posts