[Java1000제] 콘솔 만들기 2 - 도스창 따라하기
문제
[문제2] 사용자가 입력한 명령라인을 공백(' ')을 구분자로 해서 잘라서 배열에 저장한 다음에 배열의 내용을 출력하는 예제. 코드를 완성하세요.
[예제ConsoleEx2.java]
import java.util.*;
class ConsoleEx2 {
static String[] argArr; // 입력한 매개변수를 담기위한 문자열배열
public static void main(String[] args) {
while(true) {
String prompt = ">>";
System.out.print(prompt);
// 화면으로부터 라인단위로 입력받는다.
Scanner s = new Scanner(System.in);
String input = s.nextLine();
/*
다음의 코드를 완성하세요.
1. 입력받은 값에서 앞뒤 공백을 제거한다. (String클래스의 trim()사용)
2. 입력받은 명령라인의 내용을 공백을 구분자로 해서 나눠서 argArr에 담는다.
String클래스의 split(String regex)를 사용 - 공백이 하나 이상인 경우에도 하나의 공백으로 간주해야함
실행결과를 주의깊게 확인하세요.
*/
if(input.equalsIgnoreCase("Q")) { // q 또는 Q를 입력하면 실행종료한다.
System.exit(0);
} else {
for(int i=0; i < argArr.length;i++) {
System.out.println(argArr[i]);
}
/* 위의 코드를 향상된 for문으로 변경하면 다음과 같다.
for(String arg : argArr) {
System.out.println(arg);
}
*/
}
} // while(true)
} // main
} // class
[실행결과]
>>java ConsoleEx2.java aaa bbb ccc
java
ConsoleEx2.java
aaa
bbb
ccc
>>q
https://cafe.naver.com/javachobostudy/24688
나의 풀이
공백 하나가 아닌 여러 공백이 있더라도 해당 공백을 기준으로 문자열을 잘라야한다. 공백의 개수가 제한되어 있지 않으므로 일반 멤버변수가 아닌 정규식을 이용하였다.
import java.util.*;
class ConsoleEx2 {
static String[] argArr;
static final String ALL_SPACE = "\\s+";
public static void main(String[] args) {
while(true) {
String prompt = ">> ";
System.out.print(prompt);
Scanner s = new Scanner(System.in);
String input = s.nextLine().trim();
argArr = input.split(ALL_SPACE);
if(input.equalsIgnoreCase("Q")) {
System.exit(0);
} else {
for(int i=0; i < argArr.length;i++) {
System.out.println(argArr[i]);
}
}
}
}
}
저자 풀이
답을 알기 위해 3번 문제를 가져왔다. 사실 도저히 모르겠어서 카페 댓글에 있는 분 소스코드를 참고했었는데 훨씬 더 간단하게 해결하셨다. 하지만 실제 공백 문자는 스페이스로 만들어진 공백만 처리하고 탭같은 다른 공백은 처리하지 못한다. 상황에 따라서 맞춰쓰면 될거같다.
import java.util.*;
class ConsoleEx3 {
static String[] argArr; // 입력한 매개변수를 담기위한 문자열배열
static LinkedList q = new LinkedList(); // 사용자가 입력한 내용을 저장할 큐(Queue)
static final int MAX_SIZE = 5; // q(큐)에 저장될 수 있는 값의 개수
public static void main(String[] args) {
Scanner s = new Scanner(System.in); // 한번만 생성해서 재사용하면 되므로 반복문 밖으로 이동
while(true) {
String prompt = ">>";
System.out.print(prompt);
// 화면으로부터 라인단위로 입력받는다.
String input = s.nextLine();
save(input);
input = input.trim(); // 입력받은 값에서 불필요한 앞뒤 공백을 제거한다.
argArr = input.split(" +");
String command = argArr[0].trim();
if("".equals(command)) continue;
command = command.toLowerCase(); // 명령어를 소문자로 바꾼다.
if(command.equals("q")) { // q 또는 Q를 입력하면 실행종료한다.
System.exit(0);
} else if(command.equals("history")) { // equalsIgnoreCase대신 equals를 사용.
history();
} else {
for(int i=0; i < argArr.length;i++) {
System.out.println(argArr[i]);
}
}
} // while(true)
} // main
public static void save(String input) {
if(input==null || "".equals(input)) return;
/*
다음의 코드를 완성하세요.
1. queue에 저장한다.
2. queue의 최대크기(MAX_SIZE)를 넣으면 제일 오래된 저장값을 삭제한다.
*/
}
// 사용자가 입력한 최근 명령을 보여주는 메서드
public static void history() {
int i=0;
/*
다음의 코드를 완성하세요.
1. LinkedList에 저장된 내용(최근 MAX_SIZE개의 명령어)을 보여준다.
*/
}
} // class
Author And Source
이 문제에 관하여([Java1000제] 콘솔 만들기 2 - 도스창 따라하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rudnf003/Java1000제-콘솔-만들기-2-도스창-따라하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)