오늘은 몰랐으면 내일은 알면 된다
2022-11-07 (2) 문자열 클래스 본문
| 클래스 | 설명 |
| String | 문자열을 저장하고 조작할 때 사용 |
| StringBuilder | 효율적인 문자열 조작 기능이 필요할 때 사용 |
| StringTokenizer | 구분자로 연결된 문자열을 분리할 때 사용 |
[String]
: 문자열 리터럴은 자동으로 String 객체로 생성되지만, 생성자를 이용해서 직접 객체를 생성할 수도 있다.
네트워크 통신으로 얻은 byte 배열을 문자열로 변경할때와 같이, byte 배열을 문자열로 변환해야 할때가 있다. 이럴 때 다음의 생성자를 통해 String 객체를 생성한다.
String str = new String(byte[] bytes); //기본 문자셋으로 배열 디코딩
String str = new String(byte[] bytes, String charsetName); //특정 문자셋으로 배열 디코딩
String의 객체 내용은 불변이다.
String data = "ABC";
data += "DEF";
예를들어 위의 코드는 data에 DEF를 추가로 결합해서 data 자체를 변경하는 것처럼 보이지만, 실제로는 "ABCDEF"라는 문자열 객체를 새로 생성한다.
String s = "자바";
String s1 = "자바"; //s 와 동일객체를 참조
String s2 = new String("자바"); //새로운 객체를 생성
그러나 String은 좀 특수한 특징이 있는데, 바로 동일한 문자열일 경우에는 기존 메모리를 재참조한다는 것이다.
String의 경우 문자열을 변경하면 기존 객체를 버리고 계속해서 새로운 객체를 생성하기 때문에 효율성이 별로 좋지는 않다. 따라서 문자열을 자주 수정해야한다면 StringBuilder를 사용하는 것이 좋다.
[StringBuilder]
: StringBuilder는 내부 버퍼에 문자열을 저장해두고 그 안에서 추가,수정,삭제를 하도록 되어있다. 따라서 String 처럼 새로운 객체를 만들지 않아도 문자열을 조작할 수 있다. 메소드 체이닝을 사용할 수 있다.
| 리턴 타입 | 메소드(매개변수) | 설명 |
| StringBuilder | append(기본값 | 문자열) | 문자열을 끝에 추가 |
| StringBuilder | insert(위치, 기본값 | 문자열) | 문자열을 지정 위치에 추가 |
| StringBuilder | delete(시작 위치, 끝 위치) | 문자열 일부를 삭제 |
| StringBuilder | replace(시작 위치, 끝 위치, 문자열) | 문자열 일부를 대체 |
| String | toString() | 완성된 문자열을 리턴 |
[StringTokenizer]
: 문자열이 구분자(delimiter)로 연결되어 있을 경우, 구분자를 기준으로 문자열을 분리하려면 String의 split()를 쓰거나 StringTokenizer를 사용한다. split()이 정규 표현식으로 구분하고, StringTokenizer는 문자로 구분한다는 차이점이 있다.
여러 구분자가 있을때는 다음과 같이 split을 사용한다.
String data = "김&이,박-송";
String[] names = data.split("&|,|-"); //& 또는 , 또는 -
한 종류밖에 없다면 StringTokenizer를 사용할 수도 있다. 두번째 매개값인 구분자를 생략하면 공백이 기본 구분자가 된다.
String data = "김/이/박";
StringTokenizer st = new StringTokenizer(data, "/");
| 리턴 타입 | 메소드(매개변수) | 설명 |
| int | countTokens() | 분리할 수 있는 문자열의 총 수 |
| boolean | hasMoreTokens() | 남아 있는 문자열이 있는지 여부 |
| String | nextToken() | 문자열을 하나씩 가져옴 - 없으면 예외 발생 |
'Java > JAVA 개발자 양성과정' 카테고리의 다른 글
| 2022-11-07 (4) 오라클 함수 - 문자 함수 (0) | 2022.11.07 |
|---|---|
| 2022-11-07 (3) SELECT, 연산자 (0) | 2022.11.07 |
| 2022-11-07 (1) DB 개관 (0) | 2022.11.07 |
| 2022-11-04 (2) 스레드(Thread) (0) | 2022.11.04 |
| 2022-11-04 (1) DI(Dependency Injection) 맛보기, File (0) | 2022.11.04 |