프로그램 개발/미분류

[LeetCode/Java]Array and String - Introduction to String

(ㅇㅅㅎ) 2020. 8. 25. 13:43
728x90
반응형

나중에 다시 찾아보기 위한 한글 번역 및 요약

 

문자열 소개

문자열은 실제로 유니 코드 문자의 배열입니다. 배열에서 사용한 거의 모든 작업을 수행할 수 있습니다.

그러나 몇 가지 차이점이 있습니다. 문자열을 다룰 때 알아야 할 몇 가지 사항을 살펴보겠습니다. 이러한 기능은 언어마다 많이 다를 수 있습니다.

 

기능 비교

문자열에는 자체 비교 기능이 있습니다. 하지만 사용하는 언어가 연산자 오버 로딩을 지원하느냐에 따라서 "==" 연산자를 사용하여 비교가 가능하거나 불가능합니다. 

Java의 경우 연산자 오버 로딩을 지원하지 않기 때문에 "=="를 사용하여 두 문자열을 비교할 수 없습니다.

"=="를 사용하면 실제로 이 두 개체가 동일한 개체인지 비교해야 합니다.

코드로 확인해 보시면 이해하시기 편합니다.

public class Main {
    public static void main(String[] args) {
        // 초기화
        String s1 = "Hello World";
        System.out.println("s1 is \"" + s1 + "\"");
        String s2 = s1;
        System.out.println("s2 is another reference to s1.");
        String s3 = new String(s1);
        System.out.println("s3 is a copy of s1.");
 
        // '=='를 사용한 비교
        System.out.println("Compared by '==':");
 
        // 문자열은 변경할 수 없고 s1이 "Hello World"이므로 true
        System.out.println("s1 and \"Hello World\": " + (s1 == "Hello World"));
 
        // s1과 s2가 동일한 객체의 참조이므로 true
        System.out.println("s1 and s2: " + (s1 == s2));
 
        // s3가 다른 새 객체를 참조하므로 false
        System.out.println("s1 and s3: " + (s1 == s3));
 
        // 'equals'을 사용한 비교
        System.out.println("Compared by 'equals':");
        System.out.println("s1 and \"Hello World\": " + s1.equals("Hello World"));
        System.out.println("s1 and s2: " + s1.equals(s2));
        System.out.println("s1 and s3: " + s1.equals(s3));
 
        // 'compareTo'을 사용한 비교
        System.out.println("Compared by 'compareTo':");
        System.out.println("s1 and \"Hello World\": " + (s1.compareTo("Hello World"== 0));
        System.out.println("s1 and s2: " + (s1.compareTo(s2) == 0));
        System.out.println("s1 and s3: " + (s1.compareTo(s3) == 0));
    }
}
 
 

문자열이 배열과 같다 하여 특정 인덱스의 원소를 변경하는 것은 Java에서는 불가능합니다.

public class Main {
    public static void main(String[] args) {
        String s1 = "Hello World";
        // 오류 발생
        s1[5= ',';
        System.out.println(s1);
    }
}
 

이 외에 여러 가지로 문자열 기본 제공 작업을 할 수 있습니다.

public class Main {
    public static void main(String[] args) {
        String s1 = "Hello World";
 
        // 1. 추가
        s1 += "!";
        System.out.println(s1);
 
        // 2. 찾기
        System.out.println("The position of first 'o' is: " + s1.indexOf('o'));
        System.out.println("The position of last 'o' is: " + s1.lastIndexOf('o'));
 
        // 3. 부분 문자열
        System.out.println(s1.substring(611));
    }
}
 

이러한 기본 제공 작업의 시간 복잡성을 알고 있어야 합니다.

예를 들어 문자열의 길이가 N인 경우 찾기 작업과 부분 문자열 작업의 시간 복잡도는 O(N)입니다.

또한 문자열이 변경 불가능한 언어에서는 연결 연산에 주의해야 합니다.

반응형