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
33 changes: 32 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,32 @@
# java-calculator-precourse
# ✨ 문자열 덧셈 계산기 (String Calculator)

## 📘 구현 목표
사용자로부터 입력받은 문자열에 포함된 "숫자들의 합"을 계산하여 출력하는 프로그램을 구현한다.
입력 문자열에는 쉼표(`,`), 콜론(`:`) 또는 커스텀 구분자를 사용할 수 있다.


## ✅ 기능 요구사항

- 입력 요구사항
- 구분자와 양수로 이루어진 문자열을 입력받는다.
- 기본 구분자는 쉼표(`,`) 또는 콜론(`:`)이다.
- 구분자 이외에 **커스텀 구분자**를 지정할 수 있어야 한다.
- 문자열 앞부분의 `//`와 `\n` 사이에 위치한 문자를 구분자로 인식한다.
- 예시:
//;\n1;2;3 → 구분자는 ';'


- 입력 및 처리 흐름
1. 콘솔에 "덧셈할 문자열을 입력해주세요."를 출력한다.
2. `Console.readLine()`을 통해 문자열 입력을 받는다.
3. 입력받은 문자열을 `char` 형태로 쪼개어 하나씩 순회한다.
4. 조건문 처리:
- `,` 또는 `:`을 발견하면 split 기준으로 간주하고 다음 문자로 이동한다.
- `//`가 존재하면 `\n` 사이에 있는 문자를 커스텀 구분자로 사용한다.
5. 각 숫자(`char` → `int`)를 추출하여 합산한다.
6. 입력 요구사항을 벗어나는 값이 들어오면 `IllegalArgumentException`을 발생시키고 프로그램을 종료한다.

- 출력 요구사항
- 숫자들의 합계를 계산한 뒤 다음 형식으로 결과를 출력한다.

결과 : 합계
57 changes: 57 additions & 0 deletions gradle/wrapper/src/main/java/calculator/Application.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package calculator;

import camp.nextstep.edu.missionutils.Console;
import java.util.regex.Pattern;

public class Application {
public static void main(String[] args) {
System.out.println("덧셈할 문자열을 입력해주세요.");
String input = Console.readLine();

try {
int result = splitAndSum(input);
System.out.println("결과 : " + result);
} catch (IllegalArgumentException e) {
System.out.println("잘못된 입력입니다: " + e.getMessage());
}
}

public static int splitAndSum(String input) {
if (input == null || input.isEmpty()) {
return 0;
}

String delimiters = ",|:"; // 기본 구분자
String numbers = input;

// 커스텀 구분자 처리
if (input.startsWith("//")) {
int newlineIndex = input.indexOf("\n");
if (newlineIndex == -1) {
throw new IllegalArgumentException("잘못된 구분자 형식입니다.");
}
String customDelimiter = input.substring(2, newlineIndex);
delimiters = Pattern.quote(customDelimiter);
numbers = input.substring(newlineIndex + 1);
}

String[] tokens = numbers.split(delimiters);
int sum = 0;

for (String token : tokens) {
if (token.isEmpty()) continue;

try {
int number = Integer.parseInt(token);
if (number < 0) {
throw new IllegalArgumentException("음수는 허용되지 않습니다: " + number);
}
sum += number;
} catch (NumberFormatException e) {
throw new IllegalArgumentException("숫자가 아닌 값이 포함되어 있습니다: " + token);
}
}

return sum;
}
}