[자바스크립트] String.indexOf(), String.slice() 개념 / 문자열의 특정 단어 제거하기

rimu·2020년 4월 22일
0
post-custom-banner

자바스크립트는 문자열 데이터를 처리하는 함수(메서드)가 다양한 방법으로 있다.
아래 예제는 다양한 문자열 메서드 중에서 문자열의 위치를 찾는 String.indexOf() 와 특정 문자열을 제거하는 String.slice() 를 이용하여 내가 원하는 결과를 도출해보는 내용이다.
slice() 메서드가 꽤 까다로워서 이번 기회에 정리를 잘 해놔야겠다.

String 관련 메서드 설명보기


1. 문자열 찾기

indexOf() 함수는 특정 문자열이 들어있는지 확인하고,
있으면 몇 번 째 순서에 해당 문자열이 있는지 알려준다.
혹시 해당 문자열이 없다면 -1을 반환한다.

let info = "JavaScript는 프로래밍 언어이다.";
위의 설명에 "프로래밍"이라는 단어가 포함됐는지 알고 싶다면, indexOf()를 이용하면 된다.

let info = "JavaScript는 프로래밍 언어이다.";
let firstChar = info.indexOf("프로래밍"); 
console.log(firstChar);
//결과: 12 출력된다. 

2.문자열 제거하기

slice(a, b) 함수는 이름그대로 텍스트를 잘라주는 함수이다.
문장 중 a부터 b-1까지 자른 문자열을 반환한다.
slice(잘릴 시작위치, 잘릴 끝위치)

위에서 봤던 indexOf와 이어서 예제를 계속 봐보자.
아래의 if조건문은 '프로래밍'이라는 문자열이 존재할때 실행되는 코드이고,
'프로래밍' 이라고 오타가 났을때 수정을 해주는 함수이다.
앞서 봤던대로 해당문자열이 시작되는 위치는 변수 firstChar였다.
그래서 전체 문자열에서 시작부터 프로래밍 문자가 시작되기 전까지 잘라주고 단어를 '프로그래밍'이라고 수정해주었다.


let info = "JavaScript는 프로래밍 언어이다.";
let firstChar = info.indexOf("프로래밍"); 

if (firstChar !== -1) { 
  info = info.slice(0, firstChar) + "프로그래밍" + info.slice(firstChar+4, info.length); 
}

slice 함수의 중요한 점은 잘릴 끝위치인데, 12번째까지라고 설정하면 해당 문자는 포함하지 않고 그 직전에서 끊어준다.



위의 문자열 함수들을 연습해보는 예제다.

Q. sliceCityFromAddress 함수를 구현해 주세요.
sliceCityFromAddress 함수는 address 인자를 받습니다.
address 인자에는 주소를 나타내는 string이 주어집니다.
주어진 주소가 어느 도시인지를 찾아내서,
해당 주소에서 도시 부분만 삭제한 새로운 주소를 리턴해 주세요.


[참고] 주소는 무조건 "시" 로 끝납니다. 예를 들어, "서울시".
"도" 와 "시" 는 주소에 한번 밖에 포함되어 있지 않습니다.

예를 들어, 다음과 같은 주소가 주어졌다면;
"경기도 성남시 분당구 중앙공원로 53"
다음과 같은 값이 리턴되어야 합니다:
"경기도 분당구 중앙공원로 53"

function sliceCityFromAddress(address){

let first = address.indexOf(" ");
let si = address.indexOf('시');

if (first < si) {
 let firstLetter = address.slice(0,first);
 return sentence = firstLetter + address.slice(si+1, address.length) 
  
 } else {
   return sentence = address.slice(si+2, address.length)
 } 
  
}
 
 sliceCityFromAddress('서울특별시 강남구 테헤란로 427 위워크타워');

이 문제의 경우 두가지 경우로 나누어서 생각해야하는데, "시" 로 끝나는 주소가 문장의 처음에 위치 할 때와 그렇지 않을때이다.
(ex '서울특별시 강남구 테헤란로 427 위워크타워')
(ex '경기도 성남시 분당구 중앙공원로 53')

그래서 이걸 비교하기 위해서 문자열의 위치를 찾는 indexOf 함수를 이용해서 " " 공백의 위치를 찾는다. (변수 first)
그리고 "시"라는 문자의 위치를 찾아서, (변수 si)

first < si 이면 공백이 더 앞에 있는 경우니까 시 앞에 단어가 있다고 봐야한다. 이 경우 앞의 단어들을 한번에 제거하면 안되기 때문의 위의 예시처럼 공백을 기준으로 앞 뒤 문자열을 더해줘야한다.

그 외의 경우에는 시 앞에 또다른 단어가 없어서 간단하게 공백 이후부터 문자열 길이전체만큼 잘라내면 된다.

profile
Perfectly imperfect ✨
post-custom-banner

0개의 댓글