String 클래스
String str = "str1"; //문자열 객체 생성
str = "str2";
최초에 생성된 문자열 객체는 생성된 후 다른 값인 "str2"로 수정이 불가능하다.
위와 같이 "str2"로 바꿔지는 것이 아니라, "str2"로 새로운 String(문자열)객체가 생성되어서 str참조변수에 새로운주소가 할당된다. 즉 최초에 생성한 "str1"과 "str2" 두 개의 객체가 각각 heap메모리에 생성되어 있다.
▶ 메소드
//문자열객체.메소드
System.out.println(str.concat("hello"));
1) charAt 문자 뽑아내기
2) concat 문자열 합치기
3) contains 문자열 포함 여부
4) equals : 문자열 일치여부 확인
5) length() : 문자열의 길이 반환
6) trim : 문자열 양쪽 공백을 제거
7) hashCode : 문자열 주소값 반환한다. 모든 객체의 부모 클래스인 Object 클래스에 정의되어있다.
8) System.identityHashCode : 객체의 고유한 hashcode를 리턴해준다.
String str = "abc"; //heap객체 생성
String str1 = "abc";
String str2 = "def";
System.out.println(str.hashCode()); //동등한 값을 가진 객체 -> 주소새로생성X -> 같은 주소값
System.out.println(str1.hashCode()); //동등한 값을 가진 객체 -> 주소새로생성X -> 같은 주소값
System.out.println(str2.hashCode());
System.out.println(System.identityHashCode(str)); //동등한 값을 가진 객체 -> 주소새로생성X -> 같은 주소값
System.out.println(System.identityHashCode(str1)); //동등한 값을 가진 객체 -> 주소새로생성X -> 같은 주소값
9) split : 문자열참조변수.split("특수기호") -> 특수기호를 기준으로 문자열을 쪼개서 배열로 반환해준다.
String str = "가,나다,라";
String[] sArr = str.split(",");
for(String arr : sArr) {
System.out.println(arr);
}
가
나다
라
StringBuffer 클래스 & StringBuilder 클래스
문자열을 추가하거나 변경할 때 주로 사용하는 자료형이다. 새로운 객체를 생성시키지 않고, 기존에 있는 객체의 크기를 증가시키면서 값을 더한다.
따라서 String클래스와는 달리 최초에 생성한 문자열값은 수정가능하고 수정 및 삭제에 대한 결과가 기존문자열에 수정되어 적용된다.
* 예시1
public class Test {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("hello");
sb.append(" ");
sb.append("jump to java");
System.out.println(sb.toString());
}
}
* 예시2
public class Test {
public static void main(String[] args) {
String temp = "";
temp += "hello";
temp += " ";
temp += "jump to java";
System.out.println(temp);
}
}
* 결과
hello jump to java
두 예제 모두 결과는 동일하지만 내부적으로 객체가 생성되고 메모리가 사용되는 과정은 다르다.
첫번 째 예제의 경우 StringBuffer 객체는 단 한번만 생성된다. append메소드를 사용해서 값을 추가하면 새로운 객체를 생성하는 것이 아니라 기존객체에 추가한다.
두번 째 예제는 String 자료형에 + 연산이 있을 때마다 새로운 String 객체가 생성된다(문자열 간 + 연산이 있는 경우 자바는 자동으로 새로운 String 객체를 만들어 낸다). String클래스는 최초 생성 후 기존 객체의 값을 수정하는 것이 아니라 새로운 객체를 만들어 낸다. ( 한번 값이 생성되면 그 값을 변경할 수 없는 것을 immutable하다고 한다. )따라서 두번 째 예제에서는 총 4개의 String 자료형 객체가 만들어지게 된다.
그렇다면 무조건 StringBuffer를 사용하는 것이 좋을까?
그건 상황에 따라 다르다. StringBuffer 자료형은 String 자료형보다 무거운 편에 속한다. new StringBuffer() 로 객체를 생성하는 것은 일반 String을 사용하는 것보다 메모리 사용량도 많고 속도도 느리다. 따라서 문자열 추가나 변경등의 작업이 많을 경우에는 StringBuffer를, 문자열 변경 작업이 거의 없는 경우에는 그냥 String을 사용하는 것이 유리하다.
-->(아래출처참고)
▶ 메소드
1) append : 기존 문자열에 문자열을 뒤에 추가
StringBuilder sb = new StringBuilder("first");
sb.append(" second");
2) insert : 기존 문자열의 원하는 부분에 문자열 삽입
sb.insert(1, " surprise");
3) toString : 객체가 가지고 있는 값들을 문자열로 만들어 반환
4) delete : 삭제
//the beginning index->inclusive / the ending index->exclusive
sb.delete(0,6)
5) reverse : 문자열 반전
6) capacity : StringBuilder객체 크기
7) length : StringBuilder객체 안 문자열 크기
private static void method1() {
StringBuilder sb = new StringBuilder("환불원정대");
System.out.println(sb.capacity()); //sb의 크기- 21(16+5)
System.out.println(sb.length()); //sb안 들어있는 문자열 크기 -5
StringBuilder sb1 = new StringBuilder(20); //기본 메모리 확보크기를 정해서 객체를 생성할 수도 있다.
System.out.println(sb1.capacity()); //- 20
System.out.println(sb1.length()); //0
}
▶ 차이점
StringBuffer클래스는 쓰레드기능제공하지만 (성능저하요인),
StringBuilder클래스는 쓰레드기능을 제공하지 않는다.
StringTokenizer 클래스
문자열을 지정한 구분자로 쪼개주는 클래스이다. 그리고 쪼개진 문자열을 token 이라고 부른다.
* 예시1
String str = "김씨-=박씨-=유씨-=이씨";
StringTokenizer st = new StringTokenizer(str, "-=");
System.out.println(str);
System.out.println();
System.out.println("total tokens "+ st.countTokens()); //토큰개수 리턴
System.out.println("================tokens==================");
while(st.hasMoreTokens()) { //커서다음에 토큰이 있는지 확인
System.out.println(st.nextToken());
System.out.println(st.countTokens());
}
* 결과
김씨-=박씨-=유씨-=이씨
total tokens : 4
================tokens==================
김씨
3
박씨
2
유씨
1
이씨
0
▶ 메소드
1) countTokens() : 전체 token의 갯수가 아닌 남아있는 token갯수를 반환한다.
2) hasMoreTokens() :
3) nextToken() : 다음 토큰 String타입으로 반환
출처 및 참고 :
0. kh정보교육원 강의자료
1. String클래스 - https://m.blog.naver.com/jysaa5/221784886450
2. StringBuffer클래스 - https://wikidocs.net/276
3. StringTokenizer - https://reakwon.tistory.com/90
'Java > 정리' 카테고리의 다른 글
[Java] 컬렉션 프레임워크 - ArrayList (0) | 2021.06.16 |
---|---|
[Java] IO(입출력)_스트림 (1) | 2021.06.01 |
[Java] 다형성 (0) | 2021.05.25 |
[Java] 예외처리_try with resource (0) | 2021.05.25 |
[Java] 예외처리_BufferedReader사용 (0) | 2021.05.25 |