diff --git a/README.md b/README.md index bd90ef0247..d2cb789e3d 100644 --- a/README.md +++ b/README.md @@ -1 +1,7 @@ -# java-calculator-precourse \ No newline at end of file +# java-calculator-precourse +구분자와 양수로 구성된 문자열을 입력받아 지정된 구분자에 따라 숫자를 추출하고, 합계를 계산하는 프로그램이다. +## 기능 목록 +1. 쉼표(,)또는 콜론(:)을 구분자로 하여 문자열을 분리하고 합을 계산한다.
+2. //와 \n를 사용하여 커스텀 구분자를 설정할 수 있다. //[구분자]\n의 형식으로 설정한다.
+3. exit를 입력하면 종료한다.
+3. 잘못된 값을 입력할 경우 IllegalArgumentException을 발생시킨 후 프로그램은 종료한다.
diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 573580fb40..641060ab90 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,7 +1,92 @@ package calculator; +import java.util.Scanner; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + Scanner scanner = new Scanner(System.in); + + while (true) { + // 문자열 입력받기 + System.out.print("덧셈할 문자열을 입력해주세요. (종료하려면 'exit'를 입력해주세요.)"); + String input = scanner.nextLine(); + + if (input.equalsIgnoreCase("exit")) { + break; + } + + try { + int result = StringCalculator.add(input); + System.out.println("결과 : " + result); + } catch (IllegalArgumentException e) { + System.out.println("입력 형식이 올바르지 않습니다."); + return; + } + } + + scanner.close(); + } +} + +class StringCalculator { + public static int add(String input) { + String[] numbers; + String delimiters = ",:"; // 기본 구분자 + + // 입력 값 검증 + validateInput(input); + + // 커스텀 구분자 + if (input.startsWith("//")) { + if (input.contains("\\n")) { + String customDelimiter = input.substring(2, input.indexOf("\\n")); + delimiters += customDelimiter; + input = input.substring(input.indexOf("\\n") + 2); + } + } + + // 숫자 부분 분리 + numbers = splitNumbers(input, delimiters); + + // 각 숫자를 합산 + int sum = 0; + for (String number : numbers) { + number = number.trim(); + + sum += Integer.parseInt(number); // 숫자로 변환 후 합산 + } + return sum; + } + + private static String[] splitNumbers(String input, String delimiters) { + return input.split("[" + delimiters + "]"); + } + + private static void validateInput(String input) { + // 입력 값 길이 확인 + if (input.length() >= 100) { + throw new IllegalArgumentException(); + } + + // 커스텀 구분자 형식 확인 + if (input.startsWith("//")) { + if (!input.contains("\\n")) { + throw new IllegalArgumentException(); + } + } + + // 숫자가 아닌 문자 포함한 경우 + String[] numbers = splitNumbers(input, ",:"); + for (String number : numbers) { + if (!number.trim().isEmpty() && !number.matches("\\d+")) { + throw new IllegalArgumentException(); + } + } + + // 구분자만 입력한 경우 + if (numbers.length == 0) { + throw new IllegalArgumentException(); + } + } }