diff --git a/README.md b/README.md index bd90ef0247..1e3db006b0 100644 --- a/README.md +++ b/README.md @@ -1 +1,11 @@ -# java-calculator-precourse \ No newline at end of file +# java-calculator-precourse +# 문자열 덧셈 계산기 + +## 기능 요구 사항 + +1. 사용자가 입력하는 값은 camp.nextstep.edu.missionutils.Console의 readLine()을 활용하여 쉼표(`,`) 또는 콜론(`:`)을 구분자로 가지는 문자열을 전달하는 경우, 각 숫자의 합을 반환한다. + +2. 기본 구분자 외에도 커스텀 구분자를 지정할 수 있도록 한다. +커스텀 구분자는 문자열 앞부분의 "//"와 "\n" 사이에 위치하는 문자를 커스텀 구분자로 사용한다. + +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 573580fb40..e4b95596a1 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,7 +1,59 @@ package calculator; +import camp.nextstep.edu.missionutils.Console; +import java.util.regex.Pattern; + public class Application { + public static void main(String[] args) { - // TODO: 프로그램 구현 + System.out.println("덧셈할 문자열을 입력해 주세요."); + String input = Console.readLine(); + int result = calculateSum(input); + System.out.println("결과 : " + result); + } + + public static int calculateSum(String input) { + if (input == null || input.isEmpty()) { + return 0; + } + + // 사용자가 입력한 "\\n" 글자를 실제 줄바꿈 문자로 치환 + String processedInput = input.replace("\\n", "\n"); + + String[] numbers; + if (processedInput.startsWith("//") && processedInput.contains("\n")) { + int newlineIndex = processedInput.indexOf("\n"); + String delimiter = processedInput.substring(2, newlineIndex); + String textToSplit = processedInput.substring(newlineIndex + 1); + numbers = textToSplit.split(Pattern.quote(delimiter)); + } else { + numbers = processedInput.split("[,:]"); + } + + return sumAndValidate(numbers); + } + + private static int sumAndValidate(String[] numbers) { + int sum = 0; + for (String numberStr : numbers) { + String trimmed = numberStr.trim(); + if (trimmed.isEmpty()) { + continue; + } + + int number; + try { + number = Integer.parseInt(trimmed); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("입력값에 숫자가 아닌 문자가 포함되어 있습니다."); + } + + if (number < 0) { + throw new IllegalArgumentException("음수는 입력할 수 없습니다."); + } + + sum += number; + } + return sum; } -} +} \ No newline at end of file