[TIL] String

양주영·2021년 11월 3일
0

javascript

목록 보기
30/42
let info = "JavaScript는 프로래밍 언어이다.";
let firstChar = info.indexOf("프로래밍");

console.log(info, firstChar); 
//JavaScript는 프로래밍 언어이다. 12

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

오타 찾아서 수정하기

우리는 위 코드 오타 프로래밍을 찾아서 프로그래밍으로 바꿔줘야 한다.
그럼 지금부터 코드 분석하며 slice함수, indexOf함수를 이해해보고, 문자열 수정까지 해보도록 하자!

우리는 info 에서 "프로래밍" 단어가 포함됐는지 알고 싶다.
indexOf 메소드를 사용해 문자열에 특정 문자열("프로래밍")이 들어있는지를 확인한다.
(만약 해당 문자열이 없다면 -1을 반환할 것이다.)

그리고 콘솔로 찍어서 프로래밍이 몇 번째 인덱스에 있는지 확인한다.
콘솔로 확인한 결과 12가 나오는데, 이것은 프로래밍 문자열이 12번째부터 시작한다는 것을 알 수 있다.

지금까지 indexOf메소드를 사용해서 특정 문자열이 몇 번째 인덱스에 있는지 확인했으니 이제 우리가 직접 코드를 다시 바꿔주자.
우리가 고쳐야 할 곳은 프로래밍 부분 뿐이다.
앞부분 'JavaScript는 ', 뒷부분 ' 언어이다.'는 잘라서 그대로 붙여주기만 하면 된다.

프로래밍 문구가 있어야만 그 문구를 수정할 수 있기 때문에
firstChar-1이 아니면
즉, "프로래밍"이라는 문구가 없지 않다면
즉, "프로래밍"이라는 문구가 있다면 = "프로래밍" 오타가 포함되어있으면 if문을 실행해라.
는 조건 하에 텍스트를 수정하는 코드가 작성되어야 한다.
코드는 아래와 같다.

if( firstChar != -1 ) {
	// 오타 수정 코드
} 

그렇다면 이제 if문 안에 들어가야 하는 오타 수정 코드를 분석해보자.

console.log(info.slice(0, firstChar));
info.slice(0, firstChar)

여기에서 slice메소드를 확인할 수 있는데, slice메소드는 말 그대로 텍스트를 잘라주는 함수이다.

  • slice(잘릴 시작위치, 잘릴 끝위치)

여기에서 헷갈리기 때문에 잘 기억해야 한다!
slice(0, 12)의 뜻은 문구의 0번째부터 12번째 전인 11번째까지 잘라서 반환한다는 의미이다.
즉, 12번째 문자를 포함하지 않고, 바로 그 직전에서 끊어준다.
반환되는 문자는 'JavaScript는 '이다.

info.slice(firstChar+4, info.length)

info.slice(16, info의 길이); 즉, 이 코드를 작성한 이유는 " 언어이다."를 잘라서 붙여줘야 하기 때문이다.
여기에서도 마찬가지로 16번째부터 22번째 전 21번째까지 잘라서 반환한다는 의미이다.
length 자체가 인덱스 + 1 을 한 값이기 때문에 slice의 잘릴 끝 위치를 info.length라고 써도 무방하다.
반환되는 문자는 ' 언어이다.'

결과적으로, 콘솔로 찍어보면 오타가 수정된 'JavaScript는 프로그래밍 언어이다.'; 문구가 반환된다.


Assignment

sliceCityFromAddress 함수를 구현해 주세요.
sliceCityFromAddress 함수는 address 를 인자로 받습니다.
address 는 주소를 나타내는 string 입니다.
주어진 주소가 어느 도시 인지를 찾아 해당 주소에서 도시 부분만 삭제한 새로운 주소를 리턴해 주세요.
도시는 무조건 "시" 로 끝납니다. 예를 들어, "서울시".
"도" 와 "시" 는 주소에 한번 밖에 포함되어 있지 않습니다.
예를 들어, 다음과 같은 주소가 주어졌다면;
"경기도 성남시 분당구 중앙공원로 53"
다음과 같은 값이 리턴되어야 합니다:
"경기도 분당구 중앙공원로 53"


최초로 작성한 코드

function sliceCityFromAddress(address) {
  
  let wordDo = address.indexOf("도");
  let city = address.indexOf("시");
  let result;

  if( city != -1 ){
    return address.slice(0, wordDo+1) + "" + address.slice(city+2, address.length);
  }else {
    return address;
  }
}
sliceCityFromAddress("경기도 성남시 분당구 중앙공원로 53");

최종 코드

function sliceCityFromAddress(address) {
  
  let wordDo = address.indexOf('도');
  let wordCity = address.indexOf('시');
  
  if( wordDo !== -1 ){
    return address.slice(0, wordDo+1) + address.slice(wordCity+1);
  }else {
    return address.slice(wordCity+2);
  }
}
sliceCityFromAddress("경기도 성남시 분당구 중앙공원로 53");

먼저 '도'와 '시'의 인덱스 위치를 확인한다.
이후, '도'를 기준으로 나눈다. '도'가 있을 경우 '도' 앞부분 + '시'뒷부분 을 반환하고,
'도'가 없을 경우 '시'뒷부분을 반환하면 된다.
최초로 작성한 코드에서는 삭제되어야 하는 '시'부분에만 포커스를 두어 분기점을 '시'로 잡았다.
하지만 '도'가 없는 상황도 고려해주어야 한다.





profile
뚜벅뚜벅

0개의 댓글