이번 글에서는 길이에 상관없이 문자열을 입력받아, 해당 문자열 안에 포함된 단어의 개수를 세어 반환하는 JavaScript 함수를 작성해 보겠습니다.
예제 코드
const str = 'THis is an example string';
const findWords = (str = '') => {
if(!str.length){
return 0;
};
let count = 1;
for(let i = 0; i < str.length; i++){
if(str[i] === ' '){
count++;
};
};
return count;
};
console.log(findWords(str));
출력 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
5
코드 동작 원리
이 함수의 로직은 매우 직관적입니다.
- 입력된 문자열이 비어 있다면 즉시
0을 반환합니다. - 단어가 하나 이상 존재한다고 가정하고 카운터(
count)를1로 초기화합니다. - 문자열을 한 글자씩 순회하면서 공백(
' ')을 발견할 때마다 카운터를 1씩 증가시킵니다. - 순회가 끝나면 최종 카운트 값을 반환합니다.
더 간결한 대안: split() 활용하기
반복문 없이 split() 메서드와 정규 표현식을 조합하면 같은 기능을 한 줄로 구현할 수 있습니다.
const findWords = (str = '') => str.trim().split(/\s+/).filter(Boolean).length;
여기서 /\s+/ 정규식은 하나 이상의 연속된 공백을 의미하므로, 단어 사이에 공백이 여러 개 있어도 정확하게 개수를 셀 수 있습니다.
주의할 점
첫 번째 예제처럼 단순히 공백 문자만 세는 방식은 연속된 공백이 있을 경우 실제 단어 수보다 많게 계산될 수 있습니다. 따라서 사용자 입력처럼 형식이 일정하지 않은 문자열을 다룰 때는 trim()과 정규식 /\s+/을 함께 사용하는 두 번째 방식을 권장합니다.