코딩 스쿨 Java

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

Java Strings

Java Strings: 자바 문자열 가이드

  • *문자열(String)**은 Java에서 가장 많이 사용되는 데이터 타입 중 하나로, 문자들의 집합을 의미합니다. Java에서는 문자열을 다룰 때 String 클래스를 사용하며, 이를 통해 다양한 문자열 작업을 쉽게 수행할 수 있습니다.

Java의 문자열은 불변(immutable) 객체로, 한 번 생성된 문자열은 변경할 수 없습니다. 만약 문자열을 수정하는 작업을 하게 되면, 새로운 문자열 객체가 생성됩니다.

이 가이드는 Java에서 문자열을 선언하고 사용하는 방법, 그리고 문자열 조작을 위한 다양한 메소드들을 설명합니다.


1. 문자열 선언

Java에서는 String 클래스를 사용하여 문자열을 선언하고 초기화할 수 있습니다.

사용 예:

public class StringExample {
    public static void main(String[] args) {
        // 문자열 선언
        String greeting = "Hello, Java!";
        System.out.println(greeting);  // 출력: Hello, Java!
    }
}

설명:

  • 문자열은 큰따옴표(" ")를 사용하여 선언합니다.
  • *String*은 클래스이지만, Java에서 문자열을 다루기 쉽게 기본 데이터 타입처럼 사용할 수 있습니다.

2. 문자열 불변성 (Immutability)

Java에서 문자열은 **불변(immutable)**입니다. 즉, 한 번 생성된 문자열 객체는 변경할 수 없으며, 새로운 값을 할당하면 새로운 객체가 생성됩니다.

사용 예:

public class StringImmutability {
    public static void main(String[] args) {
        String str = "Hello";
        str = str + ", World!";
        System.out.println(str);  // 출력: Hello, World!
    }
}

설명:

  • "Hello"라는 문자열 객체가 처음 생성되고, 새로운 문자열 "Hello, World!"를 할당할 때는 새로운 객체가 생성됩니다. 원래의 "Hello"는 변경되지 않습니다.

3. 문자열 메소드

Java의 String 클래스는 문자열을 다룰 수 있는 다양한 메소드를 제공합니다. 주요 메소드를 소개하겠습니다.

3.1. 문자열 길이 구하기 (length())

length() 메소드는 문자열의 길이를 반환합니다.

public class StringLength {
    public static void main(String[] args) {
        String str = "Java Programming";
        System.out.println("문자열 길이: " + str.length());  // 출력: 16
    }
}

3.2. 문자 추출 (charAt())

charAt() 메소드는 특정 위치의 문자를 반환합니다. 인덱스는 0부터 시작합니다.

public class StringCharAt {
    public static void main(String[] args) {
        String str = "Java";
        char ch = str.charAt(1);  // 인덱스 1의 문자 'a' 반환
        System.out.println("문자: " + ch);  // 출력: a
    }
}

3.3. 문자열 합치기 (concat() 또는 + 연산자)

문자열을 합치기(연결) 위해 concat() 메소드를 사용하거나 + 연산자를 사용할 수 있습니다.

public class StringConcat {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = "World";

        // concat() 사용
        String result = str1.concat(", ").concat(str2);
        System.out.println(result);  // 출력: Hello, World!

        // + 연산자 사용
        String result2 = str1 + ", " + str2;
        System.out.println(result2);  // 출력: Hello, World!
    }
}

3.4. 문자열 비교 (equals())

equals() 메소드는 두 문자열이 같은지 비교하여 참(true) 또는 **거짓(false)**을 반환합니다.

public class StringEquals {
    public static void main(String[] args) {
        String str1 = "Java";
        String str2 = "Java";
        String str3 = "java";

        System.out.println(str1.equals(str2));  // 출력: true
        System.out.println(str1.equals(str3));  // 출력: false
    }
}

  • *equalsIgnoreCase()*를 사용하면 대소문자 무시하고 비교할 수 있습니다.
public class StringEqualsIgnoreCase {
    public static void main(String[] args) {
        String str1 = "Java";
        String str2 = "java";

        System.out.println(str1.equalsIgnoreCase(str2));  // 출력: true
    }
}

3.5. 문자열 포함 여부 확인 (contains())

contains() 메소드는 문자열이 특정 문자열을 포함하는지 확인합니다.

public class StringContains {
    public static void main(String[] args) {
        String sentence = "I love Java programming";
        boolean result = sentence.contains("Java");
        System.out.println(result);  // 출력: true
    }
}

3.6. 문자열 자르기 (substring())

substring() 메소드는 문자열의 일부를 추출하여 반환합니다.

public class StringSubstring {
    public static void main(String[] args) {
        String str = "Java Programming";
        String subStr = str.substring(5, 16);  // 인덱스 5부터 15까지 추출
        System.out.println(subStr);  // 출력: Programming
    }
}

3.7. 문자열 치환 (replace())

replace() 메소드는 문자열의 일부를 다른 문자열로 변경합니다.

public class StringReplace {
    public static void main(String[] args) {
        String str = "I love Java";
        String newStr = str.replace("Java", "Python");
        System.out.println(newStr);  // 출력: I love Python
    }
}

3.8. 문자열 대소문자 변환 (toUpperCase(), toLowerCase())

  • *toUpperCase()*는 문자열을 대문자로 변환합니다.
  • *toLowerCase()*는 문자열을 소문자로 변환합니다.
public class StringCaseConversion {
    public static void main(String[] args) {
        String str = "Java Programming";
        System.out.println(str.toUpperCase());  // 출력: JAVA PROGRAMMING
        System.out.println(str.toLowerCase());  // 출력: java programming
    }
}

3.9. 문자열 공백 제거 (trim())

trim() 메소드는 문자열의 앞뒤에 있는 공백을 제거합니다.

public class StringTrim {
    public static void main(String[] args) {
        String str = "   Java   ";
        System.out.println("[" + str.trim() + "]");  // 출력: [Java]
    }
}

3.10. 문자열 분할 (split())

split() 메소드는 문자열을 구분자로 나누어 배열로 반환합니다.

public class StringSplit {
    public static void main(String[] args) {
        String sentence = "Java,Python,C++";
        String[] languages = sentence.split(",");
        for (String lang : languages) {
            System.out.println(lang);
        }
        // 출력:
        // Java
        // Python
        // C++
    }
}


4. 문자열 비교: == vs equals()

Java에서 문자열을 비교할 때, == 연산자는 **참조값(메모리 주소)**를 비교하고, **equals()**는 문자열의 실제 내용을 비교합니다.

사용 예:

public class StringComparison {
    public static void main(String[] args) {
        String str1 = new String("Java");
        String str2 = new String("Java");

        // ==는 메모리 주소 비교
        System.out.println(str1 == str2);  // 출력: false

        // equals()는 문자열 값 비교
        System.out.println(str1.equals(str2));  // 출력: true
    }
}

설명:

  • *==*는 두 객체가 같은 메모리 주소를 참조하는지 확인하는 데 사용됩니다.
  • *equals()*는 두 문자열의 값이 같은지 확인합니다.

5. StringBuilder와 StringBuffer

Java에서는 **StringBuilder**와 StringBuffer 클래스를 사용하여 가변 문자열을 처리할 수 있습니다. 이는 문자열이 자주 변경될 때 유용하며, 성능을 높일 수 있습니다.

  • StringBuilder: 비동기 환경에서 빠른 문자열 조작이 가능하지만, 스레드 안전성을 제공하지 않습니다.
  • StringBuffer: 스레드 안전성을 제공하지만, 성능이 약간 느립니다.

사용 예:

public class StringBuilderExample {
    public static void main(String[]

 args) {
        StringBuilder sb = new StringBuilder("Hello");
        sb.append(", World!");
        System.out.println(sb.toString());  // 출력: Hello, World!
    }
}


요약

Java에서 **String**은 불변 객체로, 문자열을 다룰 때 다양한 메소드와 기능을 제공합니다. 문자열은 문자열 길이 구하기, 문자 추출, 문자열 합치기, 문자열 비교와 같은 작업을 쉽게 할 수 있습니다. 또한, 문자열이 자주 변경되는 경우에는 **StringBuilder**나 **StringBuffer**를 사용하는 것이 성능상 유리합니다. 문자열 비교 시에는 **==**와 **equals()**의 차이를 이해하고 적절히 사용해야 합니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com