diff --git a/README.md b/README.md index bd90ef0..7d68cac 100644 --- a/README.md +++ b/README.md @@ -1 +1,10 @@ -# java-calculator-precourse \ No newline at end of file +# java-calculator-precourse + +## 구현할 기능 목록 +1. 쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환한다. + - 예: "" => 0, "1,2" => 3, "1,2,3" => 6, "1,2:3" => 6 +# +2. 앞의 기본 구분자(쉼표, 콜론) 외에 커스텀 구분자를 지정할 수 있다. 커스텀 구분자는 문자열 앞부분의 "//"와 "\n" 사이에 위치하는 문자를 커스텀 구분자로 사용한다. + - 예를 들어 "//;\n1;2;3"과 같이 값을 입력할 경우 커스텀 구분자는 세미콜론(;)이며, 결과 값은 6이 반환되어야 한다. +# +3. 사용자가 잘못된 값을 입력할 경우 `IllegalArgumentException`을 발생시킨 후 애플리케이션은 종료되어야 한다. \ No newline at end of file diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 573580f..1add0ec 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,7 +1,46 @@ package calculator; +import camp.nextstep.edu.missionutils.Console; + +import java.util.ArrayList; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + // 값 입력받기 + System.out.println("덧셈할 문자열을 입력해 주세요."); + String word = Console.readLine(); + + // 기본 구분자 설정 + ArrayList operatorList = new ArrayList<>(); + operatorList.add(","); + operatorList.add(":"); + + // 커스텀 구분자 인식 + Pattern p = Pattern.compile("//\\D\\\\n"); + Matcher m = p.matcher(word); + if (m.find()) { + operatorList.add(String.valueOf(word.charAt(m.start()+2))); + word = word.substring(m.end()); + } + + // 구분자 정리 + String[] operatorArray = new String[operatorList.size()]; + for (int i = 0; i < operatorList.size(); i++) + operatorArray[i] = operatorList.get(i); + String operator = String.join("|", operatorArray); + + // 숫자 검수 및 연산 + int sum = 0; + String[] result = word.split(operator); + for (String s : result) { + int i = Integer.parseInt(s); + if (i <= 0) + throw new IllegalArgumentException(); + sum += i; + } + + System.out.printf("결과 : %d%n", sum); } }