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
14 changes: 12 additions & 2 deletions src/main/java/calculator/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
package calculator;

import static camp.nextstep.edu.missionutils.Console.readLine;

import java.io.IOError;

public class Application {
public static void main(String[] args) {
// TODO: 프로그램 구현

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

Calculator cal = new Calculator(str);

System.out.println("결과 : " + cal.getResult());
}
}
66 changes: 66 additions & 0 deletions src/main/java/calculator/Calculator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package calculator;

import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

public class Calculator {
private final String input;
private final Set<String> delimiterSet = new HashSet<>(List.of(":", ","));
private final String delimiterPattern = "//\\D\\\\n";

public Calculator(String input) {
this.input = input;
}

public int getResult() {
//입력 조건 실패시 오류 발생
if(!Validation.inputCheck(input)) throw new IllegalArgumentException("입력값이 맞지 않습니다.");
customDelimiter();

return addResultValues(getDelimiterSplitValues());
}

//커스텀 구분자 추가하기
private void customDelimiter() {
Pattern pattern = Pattern.compile(delimiterPattern);
Matcher matcher = pattern.matcher(input);

while (matcher.find()) {
String match = matcher.group();
String delimiter = match.replaceAll("(//|\\\\n)", "");

if(delimiter.startsWith("\\")) {
delimiterSet.add("\\" + delimiter);
} else {
delimiterSet.add(delimiter);
}
}
}

private String[] getDelimiterSplitValues(){
String removePattern = input.replaceAll(delimiterPattern, "");

String regex = "[" + delimiterSet.stream().map(String::valueOf).collect(Collectors.joining("")) + "]";

return removePattern.split(regex);
}

private int addResultValues(String[] values) {
if(!Validation.formatCheck(values)) throw new IllegalArgumentException("구분자가 포함되어 있습니다");

int sum = 0;
for (String value : values) {
sum += Integer.parseInt(value);
}
return sum;
}

private Set<String> getDelimiterSet() {
customDelimiter();
return delimiterSet;
}
}
14 changes: 14 additions & 0 deletions src/main/java/calculator/Validation.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package calculator;

import java.util.Arrays;

public class Validation {
public static boolean inputCheck(String input) {
String inputPattern = "(//\\D\\\\n)*([0-9]+)(\\D[0-9]+)*";
return input.matches(inputPattern);
}

public static boolean formatCheck(String[] values) {
return Arrays.stream(values).allMatch(value -> value.matches("[0-9]+"));
}
}