String 클래스
• String 클래스는 내부 문자열에 대한 수정이 불가능하다. (내용 불변 : Immutable)
• 문자열의 내용이 변경되면 새로운 객체를 생성하며 참조 대상을 잃어버린 객체는 가비지 값이 된다.
• String 클래스 간 '+' 연산자를 사용하게 되면 문자열 간의 결합이 가능하다.
• String클래스와 다른 클래스 객체, 기본형 데이터 간에 '+' 연산자를 사용하는 경우에도 내부적으로 자동 String 클래스로 변환된다.
• String은 내부 문자열의 내용을 변경할 수 없기 때문에 '+' 연산자를 사용하여 결합하면 내부적으로 StringButter를 생성하여 append() 메서드를 이용해 문자열에 대한 결합을 수행한다.
• 정적인 문자열을 처리하는 경우 주로 String 클래스를 사용한다.
• 동적인 문자열을 처리하는 경우 런타임 시 동적으로 처리해주는 StringBuffer 클래스를 사용하는 것이 효율적이다.
String 객체 생성 방법
// 스트링 리터럴로 스트링 객체 생성
String str1 = "abcd";
// String 클래스의 생성자를 이용하여 스트링 생성
char data[] = {'a', 'b', 'c', 'd'};
String str2 = new String(data);
String str3 = new String("abcd"); // str2와 str3은 모두 "abcd" 스트링
String 객체 수정 불가능
String 주요 메소드
클래스의 객체 생성 및 활용 예시
public class StringEx {
public static void main(String[] args) {
String a = new String(" C#");
String b = new String(",C++ ");
System.out.println(a + "의 길이는 " + a.length()); // 문자열의 길이(문자 개수)
System.out.println(a.contains("#")); // 문자열의 포함 관계
a = a.concat(b); // 문자열 연결
System.out.println(a);
a = a.trim(); // 문자열 앞 뒤의 공백 제거
System.out.println(a);
a = a.replace("C#","Java"); // 문자열 대치
System.out.println(a);
String s[] = a.split(","); // 문자열 분리
for (int i=0; i<s.length; i++)
System.out.println("분리된 문자열" + i + ": " + s[i]);
a = a.substring(5); // 인덱스 5부터 끝까지 서브 스트링 리턴
System.out.println(a);
char c = a.charAt(2); // 인덱스 2의 문자 리턴
System.out.println(c);
}
}
---------------------------------------결과값---------------------------------------------
C#의 길이는 3
true
C#,C++
C#,C++
Java,C++
분리된 문자열0: Java
분리된 문자열1: C++
C++
+
------------------------------------------------------------------------------------------
indexOf() 메소드
indexOf() 메소드ㅡ는 (indexOf(String s)) 찾고자 하는 대상 문자열에 s 문자열이 존재하는 경우
그 문자열 시작 위치를 반환해준다. 만약 s 문자열을 찾지 못했다면 -1을 반환한다.
(뒤에서부터 검사하고 싶은 경우에는 lastIndexOf() 메서드 사용 가능)
String name = "Lee Gang Eun";
System.out.println(name);
// Lee Gang Eun;
System.out.println(name.indexOf("Lee"));
// 0
System.out.println(name.indexOf("asfda"));
// -1
System. out.println(name.indexOf("Eun"));
// 9
replaceAll(), replace() 메소드
rePlaceAll() 메소드는 (replaceAll(String a, String b), replace(String a, String b)) 해당 객체 문자열에서
a가 들어간 문자열을 b로 바꿔준다. 둘의 차이는 정규식을 사용할 수 있냐에 있다. (replaceAll 정규식 사용가능)
s = "우리나라 대한민국 대한독립 만세";
s = s.replaceAll("대한", "자주");
System.out.println(s);
//--==>> 우리나라 자주민국 자주독립 만세
s = "abcabcabcaaabcd";
s = s.replace("abc", "T");
System.out.println(s);
//--==>> TTTaaTd
s = "abcabcabcaaabcd";
System.out.println(s.replace("abc", "T"));
System.out.println(s.replaceAll("[abc]", "T"));
//--==>> TTTaaTd // TTTTTTTTTTTTTTd
// TTTTTTTTTTTTTTd
StringBuffer 클래스
• StringBuffer 클래스는 문자열을 처리하는 클래스이다
• String과 차이점은 String은 내부 문자 수정이 불가능하지만 Buffer는 내부문자열을 변경할 수 있다.
• 가변적인 길이를 가져 객체를 생성하는 시점에서 크기값을 지정하거나 실행 시점에 버퍼 크기를 바꿀 수 있다.
StringBuffer 주요 메소드
StringBuffer 클래스 메소드 활용 예시
public class StringBufferEx {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("This");
sb.append(" is pencil"); // 문자열 덧붙이기
System.out.println(sb);
sb.insert(7, " my"); // "my" 문자열 삽입
System.out.println(sb);
sb.replace(8, 10, "your"); // "my"를 "your"로 변경
System.out.println(sb);
sb.delete(8, 13); // "your " 삭제
System.out.println(sb);
sb.setLength(4); // 스트링 버퍼 내 문자열 길이 수정
System.out.println(sb);
}
}
---------------------------------------결과값--------------------------------------------------
This is pencil
This is my pencil
This is your pencil
This is pencil
This
---------------------------------------------------------------------------------------------
append() 메소드
• StringBuffer 클래스는 String과 다르게 '+' 연산을 지원하지 않는다. 그렇기 때문에 문자열을 서로 합치는 작업을 할 때엔 append() 메소드를 사용해야 한다.
toUpperCase(), toLowerCase() 메소드
• toUpperCase() 메소드는 문자열에 존재한 모든 알파벳 문자를 대문자로 변경한다.
• toLowerCase() 메소드는 문자열에 존재한 모든 알파벳 문자를 소문자로 변경한다.
insert() 메소드
• insert() 메소드는 (insert(int idx, String s)) 해당 idx 위치에 s 문자열을 추가해주는 기능을 한다.
delete() 메소드
• delete() 메소드는 (delete(int start, int end) start 위치의 문자부터 end 문자 바로 전까지 모든 문자를 삭제한다.
StringTokenizer 클래스
• 문자열 파싱(parsing)을 제공하는 클래스로 파싱하고자 하는 문자열을 인자로 받아 생성한다.
• 파싱 - 하나의 문자열을 여러 문자열로 나누는 작업을 의미하며, 나누는 단위가 되는 문자열을 토큰(token) 이라고 한다.
• 호환성을 유지하는 목적으로 보관 유지되고 있다.
• 문자열을 파싱하기 위해서는 String클래스의 split()이나, java.util.regax 패키지를 사용할 것을 권장하고 있다.
StringTokenizer 클래스 사용 예시
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Test145
{
public static void main(String[] args) throws IOException
{
String strTemp;
String[] strArr;
int n;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("파싱할 문자열 입력(컴마구분) : ");
strTemp = br.readLine();
// 테스트(확인)
//System.out.println(strTemp);
//--==>> 사과,딸기,바나나
// StringTokenizer 클래스 인스턴스 생성
StringTokenizer st = new StringTokenizer(strTemp, ",");
//-- strTemp 를 대상 문자열로...
// [,]를 구분자로...
strArr = new String[st.countTokens()];
// [int countTokens()]
// : 파싱된 문자열의 갯수를 리턴(반환)한다.
//-- [String[] strArr = new String[3];] 와 동일한 구문
n = 0;
while(st.hasMoreTokens()) // 다음값 있는지 망보는 작업 (true, false)
{
strArr[n++] = st.nextToken();
}
// [hasMoreTokens()]
// : 사용할 수 있는 토큰이 남아있는 경우 true를 반환.
// 더 이상 사용할 토큰이 남아있지 않은 경우 false를 반환.
// 확인 결과에 대한 반환만 할 뿐...
// 실제 내용을 읽어들이는 헤드를 이동시키지 않는다.
// [nextToken()]
// : 다음 토큰을 얻어온다.
// 다음 토큰을 얻어오며 헤드를 이동시키게 된다.
// 구분자를 바꾸었을 경우 다음 호출에도
// 바뀐 구분자를 이용하여 토큰을 분리한다.
System.out.println();
System.out.print("파싱된 토큰(문자열) : ");
for(String str : strArr)
System.out.print(str + " ");
System.out.println();
'Back-End > Java' 카테고리의 다른 글
[Java] ArrayList 정리 (0) | 2022.02.21 |
---|---|
[java] Wraaper 클래스, 박싱(Boxing), 언박싱(Unboxing) (0) | 2022.02.16 |
[java] 업캐스팅(UpCasting)과 다운캐스팅(DownCasting) (0) | 2022.02.15 |
[java] 추상클래스와 인터페이스 (0) | 2022.02.08 |
[java] 접근지정자 (0) | 2022.02.07 |