join() 과 StringJoiner
✔ Join()
: static 메서드
: 여러 문자열 사이에 구분자를 넣어서 결합
String animals = "dogs, cats, bears";
String [] arr = animals.split(","); // 문자열을 ','구분자로 나눠서 배열에 저장
String str = String.join("-",arr); // 클래스메서드니까 클래스명으로 소환
String str2 = String.join("",arr); // 구분자가 없을땐 ""
System.out.println(str); // dogs-cats-bears
System.out.println(str2); // dogscatsbears buffer 사용으로 좀더 효율적인 코드가 됨
// System.out.println()내부에서 "+"(덧셈)으로 붙이는것과 동일. 객체가 계속 생성되므로 효율이 떨어짐
문자열과 기본형간의 변환
✔ 숫자를 문자열로 바꾸는 방법
: 숫자+""(빈문자열)
int i = 100;
String str1 = i+""; // 100을 "100"으로 변환 1 (편리)
String str2 = String.valueOf(i); // 100을 "100"으로 변환 2 (빠름)
✔ 문자열을 숫자로 바꾸는 방법
int i=Integer.parseInt("100"); // "100"을 100으로 변환1
int i2=Integer.valueOf("100"); // "100"을 100으로 변환2
Integer i2 = Integer.valueOf("100"); // 엄밀히 말하면 참조형으로 변환되지만 기본형으로 써도 상관없음.
기본형 → 문자열 | 문자열 → 기본형 | |
String.valueOf(type t) | type.parseType(String s) == rapper class 각 타입마다 이름이 다름 |
type.valueOf(String s) 래퍼클래스가 번거로워서 valueOf로 통일함. |
String String.valueOf(boolean b); String String.valueOf(int i); String String.valueOf(char c); String String.valueOf(float f); * byte,short를 문자열로 변경시 String valueOf(int i) 사용 |
boolean Boolean.parseBoolean(String s); int Integer.parseInt(String s); float Float.parseFloat(String s); double Double.parseDouble(String s); |
Integer.valueOf(String s); double.valueOf(String s); |
StringBuffer class
✔ StringBuffer
: 문자열을 저장하고 다루기 위한 클래스
: String 처럼 문자형 배열(char []) 을 내부적으로 가지고 있다.
: String은 불변이지만 StringBuffer는 내용을 변경할 수 있다 (mutable) 가변. 변경가능.
👉 기본적인 문자열은 String이지만 변경이 많을 경우는 StringBuffer사용
StringBuffer sb = new StringBuffer("abc");
sb.append("123"); //sb의 내용 뒤에 123을 추가. 배열에 abc123으로 들어감
StringBuffer의 생성자
: 배열은 길이 변경불가.
→ 공간이 부족하면 1. 새로운 배열을 생성(tmp)해서 2. 복사 & 3.참조 변경 (새로운 주소를 변수에 저장해줌)
→ StringBuffer는 가변이므로 저장할 문자열의 길이를 고려해서 적절한 크기로 생성
public StringBuffer (int length){ // 길이값인 int를 매개로 갖는다
value = new char[length];
shared = false;
}
public StringBuffer(){ // 버퍼의 크기를 지정하지않으면 기본적으로 16이 들어감
this(16);
}
public StringBuffer(String str){ // 문자열을 넣을시 문자열+16으로 더 크게 버퍼를 생성함
this(str.length()+16); // 생성
append(str); // append로 문자열을 붙임
}
StringBuffer의 변경
: 추가, 삭제, 삽입이 가능한 append(), delete(), insert()를 가지고있다
: 이 메서드들의 반환 타입은 Stringbuffer이므로 자기자신에 대한 참조를 반환한다.
✔ append()
: StringBuffer는 String과 달리 내용 변경이 가능
StringBuffer sb = new StringBuffer("abc");
sb.append("123"); // sb의 내용 뒤에 "123"을 추가
: append()는 지정된 내용을 StringBuffer에 추가 후, StringBuffer의 참조를 반환
StringBuffer sb2=sb.append("zz"); // 참조변수 sb가 가리키는 내용 뒤에 "zz"를 추가해서 그 주소를 sb2에 반환.
👉 즉 sb와 sb2는 같은 객체를 가리키고 있게 됨.
System.out.println(sb); //abc123zz
System.out.println(sb2); //abc123zz
StringBuffer sb = new StringBuffer("abc");
sb.append("123");
sb.append("ZZ");
// 이는 아래 식과도 동일. 성능상 차이는 없으나 코드가 좀더 간결해짐
StringBuffer sb = new StringBuffer("abc");
sb.append("123").append("ZZ"); // sb.append("ZZ")와 동일
StringBuffer의 주의점
: StringBuffer는 equals()가 오버라이딩 되어 있지 않다. (주소비교)
👉 String은 equals()가 오버라이딩 되어 있어서 내용 비교 됨.
StringBuffer sb = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("abc");
System.out.println(sb==sb2); // false
System.out.println(sb.equals(sb2)); // false
// StringBuffer을 String으로 변환 후에 equals()로 비교해야 한다.
String s = sb.toString(); // sb를 String으로 변환
String s2 = sb2.toString();
System.out.println(s.equals(s2)); // true
'🔥 Vamos > Java' 카테고리의 다른 글
1030 | 자바의 정석 기초편 :: ch9-21~9-27 (0) | 2022.10.30 |
---|---|
1029 | 자바의 정석 기초편 :: ch9-19~9-20 (0) | 2022.10.30 |
1027 | 자바의 정석 기초편 :: ch9-11 (0) | 2022.10.27 |
1027 | 자바의 정석 기초편 :: ch9-7~9-10 (0) | 2022.10.27 |
1026 | 자바의 정석 기초편 :: ch9-1~9~6 (0) | 2022.10.26 |