Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,11 @@
# java-calculator-precourse
# java-calculator-precourse
# 문자열 덧셈 계산기

## 기능 요구 사항

1. 사용자가 입력하는 값은 camp.nextstep.edu.missionutils.Console의 readLine()을 활용하여 쉼표(`,`) 또는 콜론(`:`)을 구분자로 가지는 문자열을 전달하는 경우, 각 숫자의 합을 반환한다.

2. 기본 구분자 외에도 커스텀 구분자를 지정할 수 있도록 한다.
커스텀 구분자는 문자열 앞부분의 "//"와 "\n" 사이에 위치하는 문자를 커스텀 구분자로 사용한다.

3. 잘못된 값(음수 또는 숫자가 아닌 값)을 입력할 경우 `IllegalArgumentException`을 발생시킨다.
56 changes: 54 additions & 2 deletions src/main/java/calculator/Application.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
}