From 986bf0f05348a194a2f2287ac2142925a5a92d64 Mon Sep 17 00:00:00 2001 From: younggyulee Date: Tue, 23 Jun 2020 20:08:52 +0900 Subject: [PATCH] Implement the StringAddCalculator --- .../controller/StringAddCalculator.java | 13 +++++ .../domain/Computation.java | 30 ++++++++++ .../StringAddCalculator/view/InputView.java | 14 +++++ .../StringCalculatorTest.java | 58 +++++++++++++++++++ 4 files changed, 115 insertions(+) create mode 100644 src/main/java/StringAddCalculator/controller/StringAddCalculator.java create mode 100644 src/main/java/StringAddCalculator/domain/Computation.java create mode 100644 src/main/java/StringAddCalculator/view/InputView.java create mode 100644 src/test/java/StringAddCalculator/StringCalculatorTest.java diff --git a/src/main/java/StringAddCalculator/controller/StringAddCalculator.java b/src/main/java/StringAddCalculator/controller/StringAddCalculator.java new file mode 100644 index 0000000..d17cbdb --- /dev/null +++ b/src/main/java/StringAddCalculator/controller/StringAddCalculator.java @@ -0,0 +1,13 @@ +package StringAddCalculator.controller; + +import StringAddCalculator.domain.Computation; +import StringAddCalculator.view.InputView; + + +public class StringAddCalculator { + final static private Computation computation = new Computation(); + public static void main(String[] args){ + InputView inputView = new InputView(); + computation.getNumber(inputView.askAddNumber()); + } +} diff --git a/src/main/java/StringAddCalculator/domain/Computation.java b/src/main/java/StringAddCalculator/domain/Computation.java new file mode 100644 index 0000000..e88529b --- /dev/null +++ b/src/main/java/StringAddCalculator/domain/Computation.java @@ -0,0 +1,30 @@ +package StringAddCalculator.domain; + +import java.util.Arrays; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class Computation { + public int getNumber(String s) { + + String sum = s; + if(s == null || s.isEmpty()) { + return 0; + } + + Matcher m = Pattern.compile("//(.)\\\\n(.*)").matcher(s); + if(m.find()) { + String customDelimiter = m.group(1); + String[] tokens = m.group(2).split(customDelimiter); + + sum = String.valueOf(addNumber(tokens)); + return Integer.parseInt(String.valueOf(sum)); + } + + return addNumber(s.split(",|:")); + } + + static int addNumber(String[] arr) { + return Arrays.stream(arr).map(item -> Integer.parseInt(item)).reduce(0, (a, b) -> a+b); + } +} diff --git a/src/main/java/StringAddCalculator/view/InputView.java b/src/main/java/StringAddCalculator/view/InputView.java new file mode 100644 index 0000000..77e3e09 --- /dev/null +++ b/src/main/java/StringAddCalculator/view/InputView.java @@ -0,0 +1,14 @@ +package StringAddCalculator.view; + +import java.util.Scanner; + +public class InputView { + Scanner scanner = new Scanner(System.in); + + public String askAddNumber() { + System.out.println("입력해주세요"); + String AddText = scanner.nextLine(); + return AddText; + } + +} diff --git a/src/test/java/StringAddCalculator/StringCalculatorTest.java b/src/test/java/StringAddCalculator/StringCalculatorTest.java new file mode 100644 index 0000000..3c1ea47 --- /dev/null +++ b/src/test/java/StringAddCalculator/StringCalculatorTest.java @@ -0,0 +1,58 @@ +package StringAddCalculator; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; + + +import StringAddCalculator.controller.StringAddCalculator; +import StringAddCalculator.domain.Computation; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +public class StringCalculatorTest { + private Computation computation; + + @BeforeEach + void setUp() { + computation = new Computation(); + } + + @DisplayName("널이나 빈값체크") + @Test + public void splitAndSum_null_또는_빈문자() { + int result = computation.getNumber(null); + assertEquals(0, result); + + result = computation.getNumber(""); + assertEquals(0, result); + } + + @DisplayName("숫자 하나 체크") + @Test + public void splitAndSum_숫자하나() throws Exception { + int result = computation.getNumber("1"); + assertThat(result).isEqualTo(1); + } + + @DisplayName("쉼표 구분문자 체크") + @Test + public void splitAndSum_쉼표구분자() throws Exception { + int result = computation.getNumber("1,2"); + assertThat(result).isEqualTo(3); + } + + @DisplayName("쉼표 또는 콜론 구분자") + @Test + public void splitAndSum_쉼표_또는_콜론_구분자() throws Exception { + int result = computation.getNumber("1,2:3"); + assertThat(result).isEqualTo(6); + } + + @DisplayName("구분자") + @Test + public void splitAndSum_custom_구분자() throws Exception { + int result = computation.getNumber("//;\\n1;2;3"); + assertThat(result).isEqualTo(6); + } +}