[js] String 정리

lilyoh·2020년 7월 22일
0
post-custom-banner

특정 문자열 찾기

특정 문자열은 두 가지 방법으로 찾을 수 있다.

  • 인덱스로 찾는 방법
let str = "hello";
console.log(str[0]);
// h
console.log(str[-1]);
// o
  • charAt() 메서드로 찾는 방법
let str = "hello";
console.log(str.charAt(0);
// h

없는 문자열을 찾으려고 할 때

  • 인덱스는 undefind 를 반환하고
  • charAt() 메서드는 ' '(빈 문자열) 을 반환한다

문자열 iterate

문자열을 돌면서 한 글자씩 반환할 수 있다.
for 문을 사용하면 된다.

for (let char of "hello") {
    console.log(char);
} // h, e, l, l, o

특정 문자열의 위치 찾기

특정 문자열의 위치는 indexOf() 메서드로 찾을 수 있다.
문자열이 시작되는 인덱스 값을 반환한다.

let str = "Widget with id";

console.log(str.indexOf('id')); // 1
console.log(str.indexOf('id', 2)); // 12
  • 위 예제에서 첫 번째 반환값이 1인 이유는
    'Widget' 에도 'id' 가 포함되어 있기 때문이다.
  • 원하는 단어를 찾기 위해서 indexOf() 메서드에 몇 번째 값을 원하는지 적어줄 수 있다.

if 문과 indexOf()

let str = "Widget with id";

// ex 1
if (str.indexOf("Widget")) {
  console.log("We found it");
}

// ex 2
if (str.indexOf("Widget") != 1) {
  console.log("We found it");
}
  • ex 1 은 아무 값도 반환하지 않는다.
    그 이유는 str.indexOf("Widget") 의 값이 0인데 if 문은 0을 false 로 여기기 때문이다.
  • 따라서 if 문을 사용할 때는 != 처리를 해줘야 한다.

반복되는 문자열의 위치 반환

let str = 'As sly as a fox, as strong as an ox';
let target = 'as'; // let's look for it

// solution 1
let pos = 0;
while (true) {
  let foundPos = str.indexOf(target, pos);
  if (foundPos == -1) {
    break;
  } else {
    console.log( `Found at ${foundPos}` );
  }
  pos = foundPos + 1; // continue the search from the next position
}

// solution 2
let pos = -1;
while ((pos = str.indexOf(target, pos + 1)) != -1) {
  console.log( `Found at ${foundPos}` );
}

위 코드에 대한 결과물은 아래와 같다.

'Found at 7'
'Found at 17'
'Found at 27'

bitwise NOT trick

  • 모던 자바스크립트에는 .includes 메서드가 있기 때문에
    아래의 방법은 잘 사용하지 않지만 옛날에는 사용했기 때문에 코드를 이해하기 위해서 일단 알아둔다.
    '~숫자' 하면 '-(숫자 + 1)' 을 반환한다.
alert( ~2 ); // -3, the same as -(2+1)
alert( ~1 ); // -2, the same as -(1+1)
alert( ~0 ); // -1, the same as -(0+1)
alert( ~-1 ); // 0, the same as -(-1+1)

if 문과 indexOf() 로 문자열의 존재 여부를 찾을 때 사용할 수 있다.
('~' 없이 쓰면 if 조건문 안의 값이 0 이 되어 아무것도 실행되지 않는다)

let str = "Widget";

if (~str.indexOf("Widget")) {
  console.log("Found it!");
} // 'Found it!'

includes, startsWith, endsWith

  • includs 메서드는 특정 문자열을 포함하는지 여부를 true/ false 로 반환한다.
  • 특정 인덱스부터 시작해서 문자열 포함 여부를 알 수도 있다.
alert( "Widget".includes("id") ); // true
alert( "Widget".includes("id", 3) ); // false, from position 3 there is no "id"
  • startsWith, endsWith 을 사용해서 어떤 문자열이 특정한 문자열로 시작하거나 끝나는지 여부를 true, false 값으로 반환할 수 있다.

문자열 중 일부 가져오기

문자열 중 일부를 가져오는 방법에는 3가지가 있다.
헷갈리지 말자! 주로 slice 를 사용한다. 더 유연하기 때문이다.

  • slice(start [,end])
    start 인덱스부터 end 인덱스까지의 문자열을 반환한다. (end 인덱스는 포함하지 않는다) 인자로 음수가 올 수 있다.

  • substring(start [,end])
    start 인덱스부터 end 인덱스까지의 문자열을 반환한다. (end 인덱스는 포함하지 않는다) 인자로 음수가 올 수 없다.(음수를 0으로 취급한다)

  • substr(start [,length])
    start 인덱스부터 length 만큼의 문자열을 반환한다. start 인자로 음수가 올 수 있다.

  • 아래는 slice 와 substring 의 차이

let str = "stringify";

// these are same for substring
alert( str.substring(2, 6) ); // "ring"
alert( str.substring(6, 2) ); // "ring"

// ...but not for slice:
alert( str.slice(2, 6) ); // "ring" (the same)
alert( str.slice(6, 2) ); // "" (an empty string)
post-custom-banner

0개의 댓글