HINT)
Matcher m = Pattern.compile("//(.)\n(.*)").matcher(text);
if (m.find()) {
String customDelimeter = m.group(1);
String[] tokens = m.group(2).split(customDelimeter);
}
public class StringCalculatorTest {
...
@Test
public void add_custom_구분자() throws Exception {
assertEquals(6, cal.add("//;\n1;2;3"));
}
}
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringCalculator {
public int add(String text) {
if (isBlank(text)) {
return 0;
}
return sum(toInts(split(text)));
}
private boolean isBlank(String text) {
return text == null || text.isEmpty();
}
private String[] split(String text) {
Matcher m = Pattern.compile("//(.)\n(.*)").matcher(text);
if (m.find()) {
String customDelimeter = m.group(1);
return m.group(2).split(customDelimeter);
}
return text.split(",|:");
}
private int[] toInts(String[] values) {
int numbers[] = new int[values.length];
for (int i = 0; i < values.length; i++) {
numbers[i] = Integer.parseInt(values[i])
}
return numbers;
}
private int sum(int[] numbers) {
int sum = 0;
for (int number : numbers) {
sum += number;
}
return sum;
}
}
커스텀 구분자는 정규 표현식을 이용해 문자열을 분리하고 있다. 정규 표현식을 활용하면 복잡한 문자열에서 원하는 문자열을 찾거나 특정한 패턴을 찾는데 유용하다. 이 단계도 추가적인 리팩토링 없이 다음 단계로 넘어간다.
참고도서 : https://roadbook.co.kr/169
[신간안내] 자바 웹 프로그래밍 Next Step
● 저자: 박재성 ● 페이지: 480 ● 판형: 사륙배변형(172*225) ● 도수: 1도 ● 정가: 30,000원 ● 발행일: 2016년 9월 19일 ● ISBN: 978-89-97924-24-0 93000 [강컴] [교보] [반디] [알라딘] [예스24] [인터파크] [샘
roadbook.co.kr
'교재 실습 > 자바 웹 프로그래밍 Next Step' 카테고리의 다른 글
2.5.1 테스트 주도 개발(Test Driven Development, 이하 TDD)과 리팩토링 (0) | 2025.01.12 |
---|---|
2.4.4.6 문자열 계산기에 음수를 전달하는 경우 RuntimeException 예외를 throw 한다 (0) | 2025.01.11 |
2.4.4.4 구분자를 쉼표(,) 이외에 콜론을 사용할 수 있다 (0) | 2025.01.09 |
2.4.4.3 숫자 두개를 쉼표(,) 구분자로 입력할 경우 두 숫자의 합을 반환한다 (0) | 2025.01.08 |
2.4.4.2 숫자 하나를 문자열로 입력할 경우 해당 숫자를 반환한다 (0) | 2025.01.07 |
댓글