문자열 클래스(String)
다양한 문자열의 처리를 제공하는 클래스로, 참조변수와 클래스 두 가지 역할을 수행한다.
왜 쓰는가?
-간편하게 문자열을 수정하고 제어하기 위해
사용방법
1. 객체 생성
String a = new String("STRING CLASS");
String 객체를 생성하고 생성자의 파라미터로 문자열을 입력하는 방식이다.
2. 문자 리터럴 방식
String a = "JAVA";
int, float와 비슷한 형식으로 간편하게 작성 가능하다.
문자열의 메서드
concat()
문자열을 결합하는 메서드, 하지만 더 간편하고 다른 데이터 타입의 변수도 결합할 수 있는 +연산자를 더 많이 사용한다.
String a = "Ja";
String b = "va";
String c = a.concat(b); ==> "Java"
charAt()
지정한 인덱스에 위치한 문자를 반환하는 메서드
String a = "ABCD";
char b = a.charAt(0); => 'A'
indexOf()
지정한 문자나 문자열의 위치를 인덱스로 알려주는 메서드, 만약 문자열 내에 없다면 -1을 반환한다.
String a ="abcdef"
int b = a.indexOf("a"); ==> 0
substring()
문자열을 잘라낼 때 사용하는 메서드,
단일 파라미터를 사용하면 해당 인덱스부터 끝까지 잘라내고
2개의 파라미터를 사용하면 첫 번째 파라미터에 해당하는 인덱스부터 두 번째 파라미터에 해당하는 인덱스의 전까지 잘라낸다.
String a = "01234";
1. 단일 파라미터
a.substring(3); ==> "4"
2. 2개의 파라미터
a.substring(2, 4); ==>"23"
equals()
문자열을 비교하는 데 사용되는 메서드(true/false)로 대소문자를 구분하여 비교한다.
참조형 데이터 타입인 변수는 대입 연산자를 사용할 수 없기 때문에 equals() 메서드로 비교한다.
String a ="java";
String b ="java";
String c ="JAva";
a.equals(b); ==> true
a.equals(c); ==> false
split()
특정 기호, 공백으로 문자열을 구분하여 배열의 요소로 저장하는 메서드로
저장된 요소는 for문을 사용해 출력 가능하다.
String a = "안녕 하 세 요!";
String[] b = a.split(" "); ==> {"안녕", "하", "세", "요!"}
저장된 요소는 for문으로 출력할 수 있다.
equalsIgnoerCase()
문자열을 대소문자 구분 없이 비교하여 내용일 일치하는지 체크하는 메서드(true/false)
String a = "JaVa";
String b = "jAvA";
Boolean c = a.equalsIgnoreCase(b); ==> true
join()
배열의 요소들 사이사이에 특정 문자를 넣어 하나의 문자열로 만드는 메서드(공백가능)
String[] a = {"A","B","C"};
String b = String.join("#", a); ==> "A#B#C"
trim()
문자열의 앞, 뒤 공백을 제거하는 메서드
String a = " JAVA ";
String b = a.trim(); ==> "JAVA"
valueOf()
일반 데이터 타입의 값을 String타입의 문자열로 변환시키는 메서드
int a = 100;
String b = String.valueOf(a); ==> "100"
format()
문자열을 특정 형식으로 포맷하는 데 사용되는 메서드, 사용 방법은 printf()와 동일하다.
%d : 정수형
%f : 실수형
%s : 문자열
%n : 줄 바꿈
int a = 10;
float b = 1.5;
String c = "감자";
String d = String.format("%d는 정수, %f는 실수, %s는 문자열이다.", a, b, c);
==> 10은 정수, 1.5는 실수, 감자는 문자열이다.
length()
문자열의 길이를 반환하는 메서드(공백포함)
String a = "ABCD EF G";
int b = a.length(); ==> 9
String + String의 문제점
String클래스는 불변하는 성질을 가지고 있어, 수정하거나 대입하면 새로운 클래스가 생성된다.
이러한 문제는 불필요한 메모리 사용이 발생할 수 있고, 많은 결합과 수정을 반복할수록 성능이 저하될 수 있다.
String a ="A";
String b ="B";
a=b;
변수 a에 b를 대입하면, a의 값은 "B"가 된다.
하지만, 기존의 변수 a의 문자열은 메모리에 계속 남게 된다.
이러한 문제를 해결하기 위해 JAVA에서는 StringBuilder와 StringBuffer 클래스를 제공한다.
StringBuilder와 StringBuffer
Stirng 객체 안의 데이터를 내부적으로 변경할 수 있는 클래스다.
두 클래스 모두 사용하는 방법과 메서드가 동일하다.
두 클래스의 차이점
스레드 : 병렬
StringBuffer : 멀티 스레드 작성에 유리함
StringBuilder : 단일 스레드 작성에 유리함
메서드 | 의미 |
append() | 입력된 값을 문자열로 변환하여 대입 |
reverse() | 문자열의 순서를 반대로 나열 |
insert(ins pos, Object obj) | obj의 값을 문자열로 바꿔 pos인 위치에 추가(끼워넣기) |
deleteCharAt(int start, int end) | start의 위치 부터 end 직전의 위치까지의 문자열을 제거 |
deleteCharAt(int index) | index위치에 있는 문자를 제거 |
'Back_end > JAVA' 카테고리의 다른 글
JAVA - 기본 API(java.util.Random) (0) | 2024.09.27 |
---|---|
JAVA - 기본 API(Date, Calendar) (1) | 2024.09.27 |
JAVA - 내부 클래스 (0) | 2024.09.23 |
JAVA - 예외처리 (0) | 2024.09.23 |
JAVA - 추상 클래스와 인터페이스 (0) | 2024.09.22 |