Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

문자덧셈계산기 제출 #1908

Open
wants to merge 8 commits into
base: main
Choose a base branch
from
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
25 changes: 24 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,24 @@
# java-calculator-precourse
# java-calculator-precourse

## 문자열 덧셈 계산기


### 구현할 기능
+ 문자열을 받는 기능.
#### 1. 문자열의 필터링
문자열에 숫자를 제외한 구분자 또는 커스텀 구분자를 구분하는 필터링한다.

+ 입력 받은 문자열에 공백인지 체크.
+ 쉼표(,), 콜론(:) 등 기본 구분자를 필터링.
+ 문자열에 "//", "\n"사이의 구분자를 구별해 커스텀 구분자로 필터링.
+ 필터링된 문자열을 문자배열로 반환

#### 2. 필터링된 문자열의 덧셈
+ 필터링을 거친 문자배열을 정수 데이터로 전환하며 덧셈을 진행.
+ 덧셈 전 정수 데이터 체크.

#### 3. 잘못된 입력에 대한 예외처리
- 음수 입력이나 잘못된 형식의 문자에 대한 예외처리



10 changes: 9 additions & 1 deletion src/main/java/calculator/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@

public class Application {
public static void main(String[] args) {
// TODO: 프로그램 구현
String input = Input.inputString();

StringFilter strF = new StringFilter();
Calculator cal = new Calculator();

String[] numbers = strF.checkString(input);

System.out.println("결과 : " + cal.result(numbers));

}
}
23 changes: 23 additions & 0 deletions src/main/java/calculator/Calculator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package calculator;

public class Calculator {


public int result(String[] s) {
int sum = 0;

for(String number : s) {
try{


if(Integer.parseInt(number) < 0) {
throw new IllegalArgumentException("음수입니다.");
}
sum += Integer.parseInt(number);
}catch(NumberFormatException e) {
throw new IllegalArgumentException("잘못된 형식의 값입니다." + Integer.parseInt(number));
}
}
return sum;
}
}
10 changes: 10 additions & 0 deletions src/main/java/calculator/Input.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package calculator;

import camp.nextstep.edu.missionutils.Console;

public class Input {
public static String inputString() {
System.out.println("덧셈할 문자열을 입력해 주세요.");
return Console.readLine();
}
}
39 changes: 39 additions & 0 deletions src/main/java/calculator/StringFilter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package calculator;


import java.util.Arrays;

public class StringFilter {
final String baseDelimiter = "[,|:]";
String customDelimiter = "";

public String[] checkString(String input) {
input = input.replaceAll(" ", "");

if(input.isEmpty()) {
throw new IllegalArgumentException("잘못된 형식입니다.");
}

if(input.contains("//") && input.contains("\\n")) {
return customDelimiterCheck(input);
}
return filteringString(input);
}

private String[] customDelimiterCheck(String input) {
if(input.indexOf("//") > input.indexOf("\\n")) {
throw new IllegalArgumentException("커스텀 구분자를 찾을 수 없습니다.");
}
customDelimiter = input.substring(input.indexOf("//")+2, input.indexOf("\\n"));
return filteringString(input);
}

private String[] filteringString(String input) {
String replaceInput = input.replace("//","").replace("\\n", "");
return Arrays.stream(replaceInput.split(baseDelimiter))
.flatMap(part -> Arrays.stream(part.split(customDelimiter)))
.filter(s -> !s.isEmpty())
.toArray(String[]::new);

}
}
2 changes: 2 additions & 0 deletions src/test/java/calculator/ApplicationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import static org.assertj.core.api.Assertions.assertThatThrownBy;

class ApplicationTest extends NsTest {

@Test
void 커스텀_구분자_사용() {
assertSimpleTest(() -> {
Expand All @@ -24,6 +25,7 @@ class ApplicationTest extends NsTest {
);
}


@Override
public void runMain() {
Application.main(new String[]{});
Expand Down