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
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
# java-calculator-precourse
# java-calculator-precourse
구분자와 양수로 구성된 문자열을 입력받아 지정된 구분자에 따라 숫자를 추출하고, 합계를 계산하는 프로그램이다.
## 기능 목록
1. 쉼표(,)또는 콜론(:)을 구분자로 하여 문자열을 분리하고 합을 계산한다.<br/>
2. //와 \n를 사용하여 커스텀 구분자를 설정할 수 있다. //[구분자]\n의 형식으로 설정한다.<br/>
3. exit를 입력하면 종료한다.<br/>
3. 잘못된 값을 입력할 경우 IllegalArgumentException을 발생시킨 후 프로그램은 종료한다.<br/>
87 changes: 86 additions & 1 deletion src/main/java/calculator/Application.java
Original file line number Diff line number Diff line change
@@ -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();
}

}
}