-
String
-String 클래스는 문자열에 대한 작업을 할 수 있도록 제공되는 클래스이다.
-코드상에 " "로 묶인 문자열도 String 클래스의 객체이다.
-" "로 묶인 문자열은 가상머신이 객체를 생성하고 소멸까지도 담당한다.
-프로그래밍을 할 때는 " "로 쓰지만 컴파일을 하게 되면 실제로 String클래스로부터 객체를 생성하는 것으로 변경된다.
주요 메서드
-equals() : 문자열 내용을 비교
-equalsIsIgnoreCase() : 대소문자를 무시한 문자열 비교
-toUpperCase() : 소문자를 대문자로 변경
-toLowerCase() : 대문자를 소문자로 변경
-startsWith() : ~로 시작여부 검사
-endsWith() : ~로 끝나는지 여부 검사
-indexOf() : 문자열이 어디에 들어 있는지
-getBytes() : 문자열을 바이트화 시킨다.
-length() : 문자열 길이 측정
-substring() : 문자열의 일부를 가지고 온다.
-trim() : 좌우 공백 제거
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1 = "안녕하세요";
//문자열 비교
if(str1 == "안녕하세요") {
System.out.println("문자열은 같습니다.");
} else {
System.out.println("문자열은 다릅니다.");
}
//str1에는 "안녕하세요"라는 문자열을 관리하는 스트링클래스의 객체이다.
// 객체의 주소값을 str1이 담아놓는 것이다.
// if(str1 == "안녕하세요")이렇게 작성을 하면 또다른 문자열 객체를 생성을 한다.
// 즉, String str1 = "안녕하세요";에서 생성된 객체와
// if(str1 == "안녕하세요")에서 생성된 객체는 다르다.
// 그리고 객체의 주소값을 비교하는 것이기 때문에 다르다라고 나오는 것이 정상이다,
// 하지만 출력된 결과는 같다고 나온다.
// 만약 "안녕하세요"라는 글자를 100번 적었다고 가정하면,
// 그때마다 안녕하세요 라는 문자를 관리하는 객체를 100개를 생성하게 되면
// 메모리의 낭비가 된다. 똑같이 "안녕하세요" 라는 문자열을 관리하는데 그러한 객체를 똑같이 백개를 만들어 버리면,
// 낭비가 생겨버린다. 그래서 운영체제는 그렇게 하지 않고 처음 안녕하세요 라는 글자를 사용할 때는 처음 사용하는 거기 때문에
// 일단 객체를 생성을 한다. 그 다음 안녕하세요 라는 따옴표로 묶여있는 글자를 사용하게 되면,
// 새로 생성하는 게 아니라 이미 만들어져 있는 것을 그냥 가져다가 쓴다.
// 즉, 안녕하세요로 적어두면 전에 만들어 놓은 안녕하세요 라는 객체 주소값을 가지고 와서
// 사용을 하기 때문에 두개가 같은 문자열이다 라고 판단을 하게 된다.
//문자열 객체 직접 생성
String str2 = new String("안녕하세요");
//"안녕하세요" 객체의 주소값을 가지고 있는 또다른 객체를 하나 만든 것.
if(str1 == str2) {
System.out.println("두 문자열의 주소값은 같습니다.");
}else {
System.out.println("두 문자열의 주소값은 다르다.");
}
//두 문자열은 다르다 라고 나온다.
// 이 두개의 스트링 객체 str1과 str2는 각각 안녕하세요 라는 글자를 관리하고 있는데
// str1은 안녕하세요 라는 문자를 관리하는 스트링 객체 주소값을 받아 놓은것이고
// str2는 안녕하세요 라는 문자를 관리하는 스트링 객체의 주소값을 관리하는 또다른 스트링 클래스를 만든 것이다.
// 또다른 스트링 클래스를 만든 다음에 주소값을 str2에다가 넣어 준것이다. 그래서 다르다라고 나오게 된다.
String str3 = "안녕하세요";
if(str1 == str3) {
System.out.println("두 문자열의 주소값은 같습니다.");
}else {
System.out.println("두 문자열의 주소값은 다르다.");
}
//실제 내용값을 비교
if(str1.equals(str2)) {
System.out.println("두 문자열은 같습니다.");
}else {
System.out.println("두 문자열은 다릅니다.");
}
//대소문자 비교
String eng1 = "abCDef";
String eng2 = "ABcdef";
//대소문자 무시 안했을 때
if(eng1.equals(eng2)) {
System.out.println("문자열의 내용은 같습니다.");
}else {
System.out.println("문자열의 내용은 다릅니다.");
}
//결과 : 다르다
//대소문자 무시했을 때
if(eng1.equalsIgnoreCase(eng2)) {
System.out.println("대소문자를 무시하면 같다.");
}else {
System.out.println("대소문자를 무시해도 다르다.");
}
//결과 : 같다.
//문자열을 전부 대소문자로 변경하는 법
//대문자로
String upperStr = eng1.toUpperCase();
System.out.println(upperStr);
//소문자로
String lowerStr = eng1.toLowerCase();
System.out.println(lowerStr);
//문자열이 포함되어 있는지 여부
String str4 = "abcdedf";
if(str4.startsWith("abc")) {
System.out.println("abc로 시작한다.");
}else {
System.out.println("abc로 시작하지 않는다.");
}
if(str4.endsWith("def")) {
System.out.println("def로 끝납니다.");
}else {
System.out.println("def로 끝나지 않는다.");
}
System.out.println(str4.indexOf("c"));//결과 : 2 (abcdef에서 c가 몇번째 위치해 있는지.01234...순으로 센다.)
System.out.println(str4.indexOf("cd"));
System.out.println(str4.indexOf("ccc"));//없는 문자열의 경우 결과값은 -1이 나온다.
//byte형태로 변환
byte [] br = str4.getBytes();
for(int i = 0; i< br.length ; i ++) {
System.out.print(br[i] + " ");
}
System.out.println();
//byte 형태로 변환 되어진 것을 다시 스트링 클래스로
String str100 = new String(br);
System.out.println(str100);
//문자열의 일부 가져오기
String str5 = str4.substring(2, 3);//두번째에서 3번째 까지(순서 : 0,1,2)
System.out.println(str5);
//문자열의 길이 측정
System.out.println(str4.length());
System.out.println("안녕하세요".length());
//공백제거
String str6 = " 안녕하세요 ";
String str7 = str6.trim();
System.out.println(str6);
System.out.println(str7);
}참조 : 인프런 - 안드로이드를 위한 Java - String
'java' 카테고리의 다른 글
StringTokenizer (0) 2020.05.07 StringBuffer (0) 2020.05.07 Runtime클래스 (0) 2020.05.06 예외처리 (0) 2020.05.06 thread 동기화 (0) 2020.05.06