2018-3-3 TIL String
String 클래스의 메소드
String Concatenating
package yoon;
public class StringConcat {
public static void main(String [] args){
String str1 = "Coffee";
String str2 = "Brand";
String str3 = str1.concat(str2);
System.out.println(str3);
String str4 = "Fresh".concat(str3);
System.out.println(str4);
}
}
// result
CoffeeBrand
FreshCoffeeBrand
- concat메소드를 이용해서 문자열을 열결시킬 수 있다.
String Substring
package yoon;
public class SubString {
public static void main(String [] args){
String str1 = "abcdefg";
String str2 = str1.substring(2);
System.out.println(str2);
String str3 = str1.substring(2, 4);
System.out.println(str3);
}
}
//result
cdefg
cd
- str.substring(start); // start를 포함한 이후 문자열을 추출한다.
- str.substring(start, end); // start부터 end-1까지를 추출한다.
String comparing
- public boolean equals(Object anObject)
- public int compareTo(String anotherString)
package yoon;
public class CompString {
public static void main(String [] args){
String str1 = "Lexicographically";
String str2 = "lexicographically";
int cmp;
if(str1.equals(str2))
System.out.println("두 문자열은 같습니다.");
else
System.out.println("두 문자열은 다릅니다.");
cmp = str1.compareTo(str2);
if(cmp == 0)
System.out.println("두 문자열은 일치합니다.");
else if (cmp < 0)
System.out.println("사전의 앞에 위치하는 문자 : " + str1);
else
System.out.println("사전의 앞에 위치하는 문자 : " + str2);
if(str1.compareToIgnoreCase(str2) == 0)
System.out.println("두 문자열은 같습니다.");
else
System.out.println("두 문자열은 다릅니다.");
}
}
//result
두 문자열은 다릅니다.
사전의 앞에 위치하는 문자 : Lexicographically
두 문자열은 같습니다.
기본 자료형의 값을 문자열로 바꾸기
static String valueOf(boolean b)
static String valueOf(char c)
static String valueOf(double d)
static String valueOf(float f)
static String valueOf(int i)
static String valueOf(long l)
- 위의 메소드를 호출하면 기본 자료형의 값을 문자열로 바꿀 수 있다.
double e = 2.718281;
String se = String.valueOf(e);
StringBuilder
-
StringBuilder 클래스는 내부적으로 문자열을 저장하기 위한 메모리 공간을 지닌다. 이 메모리공간은 String클래스 메모리 공간과 달리 문자를 추가하거나 삭제하는 것이 가능하다.
- public StringBuilder append(int i) : 기본 자료형 데이터를 문자열 내용에 추가
- public StringBuilder delete(int start, int end) : start에서부터 end이전까지의 내용을 삭제
- public StringBuilder insert(int offset, String str) : offset의 위치에 str에 전달된 문자열을 추가
- public StringBuilder replace(int start, int end, String str) : start에서부터 end이전까지의 내용을 replace로 대체
- public StringBuilder reverse() : 문자열 내용을 뒤집는다.
- public String substring(int start, int end) : start에서부터 end이전까지의 내용만 담은 String 인스턴스의 생성 및 반환
- public String toString() : 저장된 문자열의 내용을 담은 String인스턴스의 생성 및 반환
package yoon;
public class BuildString {
public static void main(String [] args){
// 문자열 "123"이 저장된 인스턴스생성
StringBuilder stbuf = new StringBuilder("123");
stbuf.append(45678); // 문자열 덧붙이기
System.out.println(stbuf.toString());
stbuf.delete(0 ,2);
System.out.println(stbuf.toString());
stbuf.replace(0, 3, "AB");
System.out.println(stbuf.toString());
stbuf.reverse();
System.out.println(stbuf.toString());
String sub = stbuf.substring(2,4);
System.out.println(sub);
}
}
//result
12345678
345678
AB678
876BA
6B
- StringBuilder인스턴스 내부에 있는 메모리 공간의 크기를 지정해 줄 수도 있다.
StringBuilder stbuf = new StringBuilder(64);
-
하지만 공간이 부족하면 스스로 공간을 늘린다.
- public StringBuilder() : 16개 문자를 저장할 수 있는 메모리공간
- public StringBuilder(int capacity) : capacity개의 문자를 저장할 수 있는 메모리 공간 확보
- public StringBuilder(String str) : 전달되는 문자열과 16개의 문자를 저장할 수 있는 메모리 공간 확보
package yoon;
public class ReturnStringBuilder {
public static void main(String [] args){
StringBuilder stb1 = new StringBuilder("123");
StringBuilder stb2 = stb1.append(45678);
System.out.println(stb1.toString());
System.out.println(stb2.toString());
stb2.delete(0, 5);
System.out.println(stb1.toString());
System.out.println(stb2.toString());
// 참조 값의 비교
if(stb1 == stb2)
System.out.println("같은 인스턴스 참조");
else
System.out.println("다른 인스턴스 참조");
}
}
//result
12345678
12345678
678
678
같은 인스턴스 참조
StringBuilder 이전에 사용이 되던 StringBuffer클래스
- StringBuffer는 쓰레드에 안전하지만, StringBuilder는 쓰레드에 안전하지 않다.
- 멀티 쓰레드에 안전하게 설계된 StringBuffer는 속도가 느리다.
Written on March 3, 2018