자바에서 문자열을 다루는 방법은 무엇인가요?
자바에서 문자열(String)을 다루는 방법에 대해 알아보겠습니다.
자바에서 문자열은 불변(immutable) 객체이며, String 클래스 타입으로 표현됩니다.
문자열 처리에 있어 자주 사용되는 기본적인 기능과 팁을 다음과 같이 정리할 수 있습니다.
--- 1. 문자열 생성 ```java String s1 = "Hello"; // 리터럴 방식 (상수풀에 저장) String s2 = new String("Hello"); // new 연산자로 생성 (힙 메모리에 생성) ``` 일반적으로 문자열 리터럴을 많이 사용하며, 같은 내용의 문자열 리터럴은 JVM 내의 상수풀(String Pool)에서 공유됩니다.
--- 2. 문자열 기본 연산 - 길이 구하기 ```java String s = "hello"; int length = s.length(); // 5 ``` - 문자 접근 ```java char c = s.charAt(1); // 'e' ``` - 문자열 비교 ```java String s1 = "abc"; String s2 = "abc"; boolean b1 = s1.equals(s2); // true boolean b2 = s1.equalsIgnoreCase("ABC"); // true (대소문자 무시 비교) boolean b3 = s1 == s2; // true (리터럴 같은 객체를 가리키는 경우도 있음) ``` > 문자열 내용 비교 시에는 반드시 `equals()` 또는 `equalsIgnoreCase()` 를 사용해야 하며, `==`는 객체 참조 비교임에 유의해야 합니다.
- 부분 문자열 추출 ```java String s = "hello world"; String sub = s.substring(0, 5); // "hello" (0 이상 5 미만) ``` - 문자열 연결 ```java String s = "Hello" + " World"; // "Hello World" String s2 = s.concat("!"); // "Hello World!" ``` + `+` 연산자는 내부적으로 `StringBuilder`를 사용해 문자열을 연결하지만, 반복 연결 시 `StringBuilder`를 직접 사용하는 것이 성능에 유리합니다.
--- 3. 문자열 검색 및 치환 - 포함 여부 ```java boolean contains = s.contains("world"); // true ``` - 특정 문자나 문자열 위치 찾기 ```java int index = s.indexOf('o'); // 4 (처음 발생 위치) int lastIndex = s.lastIndexOf('o'); // 7 (마지막 발생 위치) ``` - 문자열 치환 ```java String replaced = s.replace("world", "Java"); // "hello Java" ``` - 대소문자 변경 ```java String upper = s.toUpperCase(); // "HELLO WORLD" String lower = s.toLowerCase(); // "hello world" ``` --- 4. 문자열 분리 (Split) ```java String fruits = "apple,banana,orange"; String[] array = fruits.split(","); // ["apple", "banana", "orange"] ``` --- 5. 문자열 형 변환 - 숫자 → 문자열 ```java int num = 100; String str1 = String.valueOf(num); // "100" String str2 = Integer.toString(num); // "100" ``` - 문자열 → 숫자 ```java String str = "123"; int n = Integer.parseInt(str); double d = Double.parseDouble("3.14"); ``` --- 6. StringBuilder / StringBuffer 사용 불변 문자열인 String 객체를 반복적으로 수정하거나 연결할 때 `StringBuilder` 또는 `StringBuffer`를 사용하면 성능 향상에 도움이 됩니다.
```java StringBuilder sb = new StringBuilder(); sb.append("Hello"); sb.append(" World"); String result = sb.toString(); ``` - `StringBuffer`는 쓰레드 안전(thread-safe)한 클래스이고, `StringBuilder`는 그렇지 않으나 단일 쓰레드 환경에서 더 빠릅니다.
--- 7. 기타 유용한 메서드들 - `trim()` : 문자열 앞뒤 공백 제거 - `isEmpty()` : 길이가 0인지 확인 (빈 문자열) - `startsWith()`, `endsWith()` : 특정 문자열로 시작하거나 끝나는지 확인 - `format()` : 서식(format)에 맞춰 문자열 생성 ```java String name = "Alice"; int age = 30; String info = String.format("Name: %s, Age: %d", name, age); ``` --- 정리 - 자바에서 문자열은 String 클래스의 불변 객체 - 문자열 비교에는 `equals()`, `equalsIgnoreCase()` 사용 - 문자열 연결 시 반복 작업에는 `StringBuilder` 권장 - 다양한 문자열 처리 메서드 제공 (`substring`, `split`, `replace` 등) - 숫자와 문자열 간 변환을 위한 `parseXxx()`, `valueOf()` 제공 위 내용을 바탕으로 자바에서 문자열을 효과적으로 다룰 수 있습니다.
필요에 따라 다양한 문자열 메서드를 활용해 보세요!