Skip to content

Commit c824141

Browse files
authored
step2) 문자열계산기 (#5927)
* step2) 문자열덧셈계산기 * 리뷰 반영
1 parent 2076ba3 commit c824141

File tree

4 files changed

+100
-0
lines changed

4 files changed

+100
-0
lines changed
+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import java.util.Arrays;
2+
3+
public class StringPlusCalculator {
4+
5+
private static String SEPERATOR_REGEX = "//(.*?)\n";
6+
7+
public int calculate(String input) {
8+
if (input == null) {
9+
return 0;
10+
}
11+
12+
StringSplitter splitter = StringSplitter.from(input);
13+
String[] splited = splitter.getInputString().split("[" + splitter.getSeparator() + "]");
14+
15+
return Arrays.stream(splited)
16+
.filter(s -> !s.isEmpty())
17+
.mapToInt(Integer::parseInt)
18+
.filter(it -> it > 0)
19+
.sum();
20+
}
21+
}

src/main/java/StringSplitter.java

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import java.util.regex.Matcher;
2+
import java.util.regex.Pattern;
3+
4+
public class StringSplitter {
5+
private String separator;
6+
private String inputString;
7+
private static String DEFAULT_SEPARATOR = ",:";
8+
public StringSplitter(String separator, String inputString) {
9+
this.separator = separator;
10+
this.inputString = inputString;
11+
}
12+
13+
public static StringSplitter from(String input) {
14+
Pattern pattern = Pattern.compile("//(.+)\n(.*)");
15+
Matcher matcher = pattern.matcher(input);
16+
17+
if (matcher.find()) {
18+
return new StringSplitter(matcher.group(1) + DEFAULT_SEPARATOR, matcher.group(2));
19+
}
20+
return new StringSplitter(DEFAULT_SEPARATOR, input);
21+
}
22+
23+
public String getSeparator() {
24+
return separator;
25+
}
26+
27+
public String getInputString() {
28+
return inputString;
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import org.junit.jupiter.params.ParameterizedTest;
2+
import org.junit.jupiter.params.provider.CsvSource;
3+
4+
import static org.junit.jupiter.api.Assertions.assertEquals;
5+
6+
class StringPlusCalculatorTest {
7+
8+
private StringPlusCalculator stringPlusCalculator = new StringPlusCalculator();
9+
10+
@ParameterizedTest
11+
@CsvSource({
12+
"'',0",
13+
"'1,2',3",
14+
"'1,2,3',6",
15+
"'1,2:3',6",
16+
"'//;\n1;2;3',6",
17+
})
18+
void seperateByDefault(String input, int result) {
19+
assertEquals(result, stringPlusCalculator.calculate(input));
20+
}
21+
}

src/test/java/StringSplitterTest.java

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import org.junit.jupiter.params.ParameterizedTest;
2+
import org.junit.jupiter.params.provider.ValueSource;
3+
4+
import static org.junit.jupiter.api.Assertions.assertEquals;
5+
6+
public class StringSplitterTest {
7+
8+
private static final String DEFAULT_SEPARATOR = ",:";
9+
10+
private void assertSeparatorAndInput(StringSplitter splitter, String expectedSeparator, String expectedInput) {
11+
assertEquals(expectedSeparator, splitter.getSeparator());
12+
assertEquals(expectedInput, splitter.getInputString());
13+
}
14+
15+
@ParameterizedTest
16+
@ValueSource(strings = {"","1,2","1,2,3","1,2:3"})
17+
public void testFromWithoutMatch(String input) {
18+
StringSplitter splitter = StringSplitter.from(input);
19+
assertSeparatorAndInput(splitter, DEFAULT_SEPARATOR, input);
20+
}
21+
22+
@ParameterizedTest
23+
@ValueSource(strings = "//;\n1;2;3")
24+
public void testFromWithMatch(String input) {
25+
StringSplitter splitter = StringSplitter.from(input);
26+
assertSeparatorAndInput(splitter, ";,:", "1;2;3");
27+
}
28+
}

0 commit comments

Comments
 (0)