Skip to content
Open
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,12 @@
# javascript-calculator-precourse
# javascript-calculator-precourse
1. 빈 문자열("")또는 null 입력 시 합계로 0을 반환한다.
2. 쉼표(,)를 구분자로 사용하여 숫자를 분리하고 덧셈을 수행한다.
3. 콜론(;)을 구분자로 사용하여 숫자를 분리하고 덧셈을 수행한다.
4. 쉼표와 콜론이 혼용된 경우에도 정상적으로 분리하여 덧셈을 수행한다.
5. 문자열 시작의 //와 \n 사이에 위치한 문자를 커스텀 구분자로 인식한다.
6. 커스텀 구분자를 사용하여 숫자를 분리하고 덧셈 결과를 반환한다.
7. 입력 문자열에 음수가 포함될 경우 [ERROR]로 시작하는 메시지와 함께 Error를 발생시킨다.
8. 입력 문자열에 숫자가 아닌 다른 값이 포함될 경우 [ERROR] 로 시작하는 메시지와 함께 Error를 발생시킨다.
9. Console.readLineAsync()를 사용해서 문자열을 입력받는다.
10. Console.print()를 사용해서 결과:[숫자]형식으로 출력한다.
11. 프로그램 실행 시작점은 App.js의 run() 함수를 따른다.
23 changes: 21 additions & 2 deletions src/App.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,24 @@
import { Console } from "@woowacourse/mission-utils";
import StringAddCalculator from "./StringAddCalculator.

class App {
async run() {}
// 11번 기능
async run() {
try {
// 9번 기능
const inputString = await Console.readLineAsync("덧셈할 문자열을 입력해 주세요.\n");

// 1~8번 기능을 가진 add 함수를 호출해서 계산
const result = StringAddCalculator.add(inputString);

// 10번 기능
Console.print(`결과 : ${result}`);

} catch (error) {
// 7, 8번 예외 처리 발생 시 메시지 출력
Console.print(error.message);
}
}
}

export default App;
export default App;
43 changes: 43 additions & 0 deletions src/StringAddCalculator.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
class StringAddCalculator {
static add(text) {
// 1번 기능: 빈 문자열("") 또는 null 입력 시 0 반환
if (text === null || text === undefined || text.length === 0) {
return 0;
}

// 2번, 3번 기능
const numbers = text.split(/[,:]/); // 쉼표(,) 또는 콜론(:)을 기준으로 구분
let calculationText = text;
// 5번, 6번 기능 구현 시작
const customMatch = calculationText.match(CUSTOM_DELIMITER_REGEX);

if (customMatch) {
const customDelimiter = customMatch[1];
delimiters = `[,:|${customDelimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')}]`;
calculationText = calculationText.replace(CUSTOM_DELIMITER_REGEX, '');
}

// 2, 3번 기능: 쉼표(,), 콜론(:), 그리고 커스텀 구분자를 포함하여 분리
const numbers = calculationText.split(new RegExp(delimiters));
let sum = 0;
for (const numberString of numbers) {
const trimmedString = numberString.trim();
if (trimmedString === "") continue;

const number = parseInt(trimmedString, 10);
// 8번 기능(에러)
if (isNaN(number)) {
throw new Error("[ERROR] 숫자만 입력할 수 있습니다.");
}
//7번 기능(에러)
if (number < 0) {
throw new Error("[ERROR] 음수는 입력할 수 없습니다.");
}
sum += number;
}

return sum;
}
}

export default StringAddCalculator;