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를 이용해 잘못 된 명령어를 고치라는 출력을 한다.
'java > java 게시판 만들기' 카테고리의 다른 글
| 게시판 만들기 2일차 "게시물 작성시 날짜와 시간 정보 저장" (0) | 2023.03.30 |
|---|---|
| 게시판 만들기 2일차 "게시물 상세보기 글의 유무 판단" (0) | 2023.03.17 |
| 게시판 만들기 2일차 "게시물 목록 기능 구현" (0) | 2023.03.15 |
| 게시판 만들기 2일차 "게시글의 유무 판별" (0) | 2023.03.15 |
| 게시판 만들기 1일차 "게시물 작성 기능 추가" (0) | 2023.03.14 |