문자열에서 특정 인덱스에 있는 문자 반환하기

jinew·2024년 12월 17일

🍎 Javascript

목록 보기
1/22
post-thumbnail
알고리즘 코드카타 중 특정 문자열의 가운데 글자를 반환하는 함수를 만드는 문제를 풀었다.
특정 문자열의 위치에 관해서는 대괄호([]) 표기법만 사용해왔기에 새로운 접근을 위해 charAt() 메소드를 사용하여 풀이하는 방식을 선택했다. (대괄호 접근법이 더 많이 사용된다지만 아직 이것저것 써보고 알아가야 할 단계이니..~)
이 메소드가 기존 사용하던 대괄호 표기법과 어떤 차이가 있을지, 또 활용할 수 있는 예제는 어떤 것이 있을 지 참고하며 학습했다.

charAt()


string.charAt(index);

: 문자열에서 1) 특정 위치의 문자를 개별로 확인/처리하거나 2) 문자열의 문자 반복 검사를 할 때 유용한 메소드다. 특히 문자열 내 특정 위치의 문자를 확인하거나 조건에 따라 작업을 수행할 때 유용하다.

  • string : 메소드를 호출하는 문자열
  • index : 반환하고자 하는 문자의 위치(index)를 나타내는 0부터 시작하는 정수
    • 0은 문자열의 첫 번째 문자를 의미
    • 인덱스가 문자열의 길이보다 크거나 음수인 경우, 빈 문자열("")을 반환

예제

const str = "Hello, world";

console.log(str.charAt(0)); // "H" (1번째 문자)
console.log(str.charAt(7)); // "W" (8번째 문자)
console.log(str.charAt(12)); // "!" (13번째 문자)
console.log(str.charAt(20)); // "" (범위를 벗어남)
console.log(str.charAt(-1)); // "" (음수 인덱스는 빈 문자열 반환)

charAt()과 대괄호 접근법


charAt() 메소드 대신 대괄호 표기법([])을 사용해 문자열의 문자에 접근할 수 있다.

const str = "Hello";

console.log(str[0]); // "H"
console.log(str.charAt(0)); // "H"
console.log(str[10]); // undefined (범위 벗어남)
console.log(str.charAt(0)); // "" (범위 벗어남)
  • charAt() : 범위를 벗어난 인덱스에 대해 빈 문자열 "" 반환
  • 대괄호 접근법 : 범위를 벗어난 인덱스에 대해 undefined 반환



charAt() 활용 예제


1. 특정 위치의 문자 검사
: 문자열에서 특정 인덱스에 있는 문자를 확인하고 조건에 따라 작업을 수행

  const str = "Hello, World!";

  // 0번째 문자가 'H'인지 확인
  if (str.charAt(0) === 'H') {
    console.log("문장은 'H'로 시작합니다.");
  } else {
    console.log("문장은 'H'로 시작하지 않습니다.");
  }

2. 문자열의 문자 반복 검사
: 문자열을 순회하면서 각 문자를 검사하거나 처리할 때 사용

  const str = "abc123";
  for (let i = 0; i < str.length; i++) {
    const char = str.charAt(i);
    if (!isNaN(char)) { // 숫자인지 확인
      console.log(`숫자 발견: ${char}`);
    }
  }

3. 대소문자 변환 및 비교
: 문자열 내 특정 문자의 대소문자를 확인하거나 변환할 때 유용

  const str = "JavaScript";

  for (let i = 0; i < str.length; i++) {
    const char = str.charAt(i);
    if (char === char.toUpperCase()) {
      console.log(`대문자: ${char}`);
    } else {
      console.log(`소문자: ${char}`);
    }
  }

4. 특정 문자 개수 세기
: 문자열 내에서 특정 문자가 몇 번 등장하는지 확인

  const str = "banana";
  let count = 0;

  for (let i = 0; i < str.length; i++) {
    if (str.charAt(i) === 'a') {
      count++;
    }
  }

  console.log(`'a'의 개수: ${count}`);

결과

'a'의 개수 : 3


5. 문자열 시작 또는 끝 확인
: 문자열이 특정 문자로 시작하거나 끝나는지 확인할 때 사용

  const str = "example.txt";

  // 문자열이 .txt로 끝나는지 확인
  if (str.charAt(str.length - 4) === '.' && str.slice(-3) === "txt") {
    console.log("이 파일은 텍스트 파일입니다.");
  }

6. 비밀번호 규칙 검사
: 비밀번호에 대문자, 소문자, 숫자, 특수 문자가 포함되었는지 검사할 때 활용

  function checkPassword(password) {
    let hasUpperCase = false;
    let hasLowerCase = false;
    let hasNumber = false;

    for (let i = 0; i < password.length; i++) {
      const char = password.charAt(i);
      if (char >= 'A' && char <= 'Z') hasUpperCase = true;
      else if (char >= 'a' && char <= 'z') hasLowerCase = true;
      else if (!isNaN(char)) hasNumber = true;
    }

    if (hasUpperCase && hasLowerCase && hasNumber) {
      console.log("비밀번호가 유효합니다.");
    } else {
      console.log("비밀번호는 대문자, 소문자, 숫자를 모두 포함해야 합니다.");
    }
  }

  checkPassword("Password123");

7. 문자열 뒤집기
: 문자열을 뒤집는 데에도 사용

  function reverseString(str) {
    let reversed = "";
    for (let i = str.length - 1; i >= 0; i--) {
      reversed += str.charAt(i);
    }
    return reversed;
  }

  console.log(reverseString("Hello")); // "olleH"

8. 특수 문자 필터링
: 문자열에서 특수 문자를 제거하거나 특정 문자만 남기는 데 사용

  const str = "Hello! How are you? 123.";
  let filtered = "";

  for (let i = 0; i < str.length; i++) {
    const char = str.charAt(i);
    if (char.match(/[a-zA-Z0-9\s]/)) { // 영문자, 숫자, 공백만 허용
      filtered += char;
    }
  }

  console.log(filtered); // "Hello How are you 123"



[오늘의 문제 / 가운데 글자 가져오기]

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

  • 제한 사항
    : s는 길이가 1 이상, 100이하인 스트링입니다.
  • 입출력 예
    : "abcde" > return "c"
    : "qwer" > return "we"
function solution(word) {
    let wordsLength = word.length;
    
    if(wordsLength % 2 === 0){
        return word.charAt(wordsLength / 2 - 1) + word.charAt(wordsLength / 2);
    } else {
        return word.charAt(wordsLength / 2);
    }
}

위처럼 작성하여 제출한 뒤 다른 사람의 풀이를 봤다.

function solution(s) {
    return s.substr(Math.ceil(s.length / 2) - 1, s.length % 2 === 0 ? 2 : 1);
}

좋아요 92개를 받은 풀이다 🤯 천재같군.. substr 의 잘라낼 length 부분을 삼항연산자로 구현한게 인상깊었다.. 아직 삼항연산자를 써본 경험이 적어서 낯선건지 손이 안 가는 것 같다.. 조만간 삼항연산자와 함께 예제를 공부해서 많이 써보고 싶은 마음! 아쟈쟈

profile
멈추지만 않으면 도착해 🛫

0개의 댓글