11package calculator .service ;
22
3+ import java .util .Arrays ;
4+
35public class CalculatorService {
46 private String s ;
5- private String plusSeparator ;
7+ private String customSeparator ;
68
79 /**
810 * 덧셈 로직을 순차적으로 진행한다.
911 */
1012 public int sum (String s ) {
1113 this .s = s ;
12- boolean hasPlusSeparator = checkPlusSeparator ();
13- String [] separatedString = separate (hasPlusSeparator );
14+ boolean hasCustomSeparator = checkCustomSeparator ();
15+ String [] separatedString = separate (hasCustomSeparator );
1416 hasNaN (separatedString );
1517 return sumSeparatedStringArr (separatedString );
1618 }
@@ -20,9 +22,9 @@ public int sum(String s) {
2022 *
2123 * @return 만약 커스텀 구분자가 있다면 true, 없다면 false 를 반환한다.
2224 */
23- private boolean checkPlusSeparator () {
25+ private boolean checkCustomSeparator () {
2426 if (s .length () >= 5 && s .startsWith ("//" ) && s .startsWith ("\\ n" , 3 )) {
25- plusSeparator = String .valueOf (s .charAt (2 ));
27+ customSeparator = String .valueOf (s .charAt (2 ));
2628 s = s .substring (5 );
2729 return true ;
2830 }
@@ -32,17 +34,17 @@ private boolean checkPlusSeparator() {
3234 /**
3335 * 받은 문자열을 구분자를 기준으로 나눈다. 만약 커스텀 구분자에 역슬래시가 있다면 문제가 생기지 않도록 한다.
3436 *
35- * @param hasPlusSeparator 커스텀 구분자가 있다면 true, 없다면 false 를 입력한다.
37+ * @param hasCustomSeparator 커스텀 구분자가 있다면 true, 없다면 false 를 입력한다.
3638 * @return 분리된 문자열을 반환한다. 이 문자열에는 반드시 숫자만 있는 것은 아니다.
3739 */
38- private String [] separate (boolean hasPlusSeparator ) {
39- if (!hasPlusSeparator ) {
40+ private String [] separate (boolean hasCustomSeparator ) {
41+ if (!hasCustomSeparator ) {
4042 return s .split ("[:,]" );
4143 }
42- if (plusSeparator .equals ("\\ " )) {
43- return s .split ("[:," + plusSeparator .repeat (2 ) + "]" );
44+ if (customSeparator .equals ("\\ " )) {
45+ return s .split ("[:," + customSeparator .repeat (2 ) + "]" );
4446 }
45- return s .split ("[:," + plusSeparator + "]" );
47+ return s .split ("[:," + customSeparator + "]" );
4648 }
4749
4850 /**
@@ -51,12 +53,10 @@ private String[] separate(boolean hasPlusSeparator) {
5153 * @param separatedStringArr 숫자 외의 문자가 있는지 확인하고 싶은 문자열을 입력한다.
5254 */
5355 private void hasNaN (String [] separatedStringArr ) {
54- for (String s : separatedStringArr ) {
55- for (char c : s .toCharArray ()) {
56- if (c < 48 || c > 57 ) {
57- throw new IllegalArgumentException ();
58- }
59- }
56+ if (Arrays .stream (separatedStringArr )
57+ .flatMapToInt (String ::chars )
58+ .anyMatch (it -> it < '0' || it > '9' )) {
59+ throw new IllegalArgumentException ();
6060 }
6161 }
6262
0 commit comments