Java에서의 String 클래스에 대해 알아보자.
자바에서는 String 인스턴스를 두 가지 방법으로 생성할 수 있다.
String str1 = new String("Simple String");
String str2 = "Simple String";
첫 번째 방법에서 알 수 있듯, String 클래스의 객체에 Simple String이라는 매개변수를 넘겨줌으로써 문자열을 출력할 수 있게 된다. 출력 결과는 같아도 참조하는 인스턴스에 차이가 있다.
import java.util.*;
public class FinalTermTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1 = "Hello Java";
String str2 = "Hello Java";
String str3 = new String("Hello Java");
String str4 = new String("Hello Java");
if(str1 == str2)
System.out.println("str1과 str2는 동일 인스턴스 참조");
else
System.out.println("str1과 str2는 다른 인스턴스 참조");
if(str3 == str4)
System.out.println("str3과 str4는 동일 인스턴스 참조");
else
System.out.println("str3과 str4는 다른 인스턴스 참조");
}
}
str3와 str4는 다른 인스턴스를 참조하고 있고 메모리에 생성되는 주소도 다르다.
String 클래스의 여러가지 메소드
- 문자열의 일부 추출: substring(int beginIndex)
- 문자열의 내용 비교: equals(String anotherString), compareTo(String anotherString), compareToIgnoreCase(String anotherString)
- 자료형의 값을 문자열로 바꾸기: valueOf(int i)
- 문자열 연결시키기: concat(String str)
import java.util.*;
public class FinalTermTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1 = "Hi";
String str2 = "Good";
String str3 = "Morning";
String str4 = "morning";
double pi = 2.718281;
int time = 6;
//문자열 일부 추출
System.out.println(str3.substring(2));
System.out.println(str3.substring(2, 5));
System.out.println("---------------------");
//문자열 내용 비교
if(str3.equals(str4))
System.out.println("같은 문자열");
else
System.out.println("다른 문자열");
if(str3.compareTo(str4) == 0)
System.out.println("같은 문자열");
else if (str3.compareTo(str4) < 0) //리턴값이 0보다 작으면 앞에 문자열이 크다
System.out.println("사전 앞에 위치하는 문자: " + str3);
else
System.out.println("사전 앞에 위치하는 문자: " + str4);
if(str3.compareToIgnoreCase(str4) == 0)
System.out.println("대소문자 무시하고 같음");
else
System.out.println("대소문자 무시하고 다름");
System.out.println("---------------------");
//기본 자료형 값을 문자열로 바꾸기
String s1 = String.valueOf(pi);
System.out.println(s1);
System.out.println("---------------------");
//문자열 연결시키기
String s2 = str1.concat(str2);
String s3 = s2.concat(str3);
System.out.println(s3);
System.out.println("Hmm~".concat(s3));
System.out.println("Time: ".concat(String.valueOf(time)));
}
}
- 문자열 수정: StringBuilder()
//원래 String 객체의 경우 내부의 문자열을 수정할 수 없지만, StringBuilder 객체는 문자열을 저장하는 가변 버퍼를 가지고 있어서 수정 가능. 문자열의 크기가 늘어나면 내부 버퍼 크기를 자동 조절한다.
import java.util.*;
public class FinalTermTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
StringBuilder stbuf = new StringBuilder("Hello");
//문자열 덧붙이기
stbuf.append("Java");
System.out.println(stbuf.toString());
//문자열 일부 삭제
stbuf.delete(0, 2);
System.out.println(stbuf.toString());
//문자열 일부 교체
stbuf.replace(0, 3, "Bye");
System.out.println(stbuf.toString());
//문자열 내용 뒤집기
stbuf.reverse();
System.out.println(stbuf.toString());
}
}
StringBuilder를 출력할 때 뒤에 toString()을 계속 붙여주는걸 보니까 리턴 값이 문자열이 아닌가보다... 그럼...뭐지..??? toString()을 빼고 출력해봐도 똑같이 나온다. 교재에는 StringBuilder append(String str) 뭐 이런식으로 나오는 걸 봐선 리턴값이 아예 StringBuilder 클래스? 인가본데 그게 도통 뭔 뜻인지는 모르겠다ㅎ
'coding > Java' 카테고리의 다른 글
[Java] 추상클래스, 추상메소드, 인터페이스 (0) | 2020.12.20 |
---|---|
[Java] 상속과 참조변수, instanceof 연산자 (0) | 2020.12.20 |
[Java] 배열(2) - 실습 (0) | 2020.12.20 |
[Java] 배열(1) - 초기화, 복사, For-each문 (0) | 2020.12.20 |
[Java] 메소드 오버로딩과 오버라이딩, Overloading vs Overriding (0) | 2020.12.20 |