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()
**의 차이를 이해하고 적절히 사용해야 합니다.