본문 바로가기
개발자/백엔드 웹 개발자 과정(국비)

2022년 12월 02일 _ 20회차 (String 클래스)

by 초응 2022. 12. 2.

[String 클래스]

 다른 클래스와 다르게 new를 사용하지 않고도 객체를 저장할 수 있는 클래스.

 

//형식
String 변수명 = "문자열";
package day20;
import java.util.*;
public class StringTest1 {

	public static void main(String[] args) {

		
		String str = "java"; 
		String str2 = "java"; //주소값을 참조할때 jvm이 heap에 저장된 "java"의 주소값을 str2에 저장
		//그래서 둘이 참조한 주소가 같아 같음으로 나옴."java"가 같다고 아니라 주소가 같다.
		System.out.println("str="+str);
		System.out.println("str2="+str2);
		
		String str3 = new String("java"); // 새로운 객체에 "java"저장.
		System.out.println("Str3="+str3);

		if(str==str2) {
			System.out.println("str==str2:같다");
		}else {
			System.out.println("str==str2:같지 않다.");
		}
		
		String res = str==str3?"같다":"같지 않다";
		System.out.println("str==str3:"+res);
		
		String res2 = str.equals(str2)?"같다":"같지 않다";
		String res3 = str.equals(str3)?"같다":"같지 않다";
		
		//equals
		
		System.out.println("str==str2:"+res2);
		System.out.println("str==str3:"+res3);
		//String : 사용자의 편리성을 위해 만들어진 클래스.
		
		Scanner sc = new Scanner(System.in);
		System.out.print("어떤 동물이 우나요?>");
		String animal = sc.nextLine();
		
//		if(animal == "고양이") {
//			System.out.println("고양이는 야옹");
//		}else if(animal == "강아지") {
//			System.out.println("강아지는 멍멍");
//		} // 실행안됨.
		
		switch(animal) {
		case "고양이" : System.out.println("고양이는 야옹");break;
		case "강아지" : System.out.println("강아지는 멍멍");break;
		case "돼지" : System.out.println("돼지는 꿀꿀");
		}
	}
}


String equals 문자열을 비교해주는 클래스

API 보기!



-String이 가지고 있는 특징-
자바에서의 String 원본 불변의 법칙. (원본의 데이터를 훼손할 수 없다.)

<String의 불변의 법칙을 보완하기 위해.>

StringBuffer 클래스 : 문자열 조작에 좀 더 적합하게 만들어진 클래스

** 반드시 new로 객체 생성해야 함.
- 재구축 : 연결(append) 삽입(insert) 삭제(delete)

package day20;

public class StringTest3 {

	public static void main(String[] args) {
		
		//StringBuffer은 정보클래스
		StringBuffer sb = new StringBuffer("Hello java!!");
		System.out.println("sb="+sb.toString()); 
		//toString은 모든 메서드가 가지고 있다.오버라이딩을 하되 본인이 가지고 있는 값을 출력.
		
		//String은 객체들을 관리하는 기능 클래스
//		String str[] = {"java","jsp","framework"};
//		System.out.println(str);//
		
		sb.append("jsp!!");
		System.out.println("sb="+sb);
		sb.insert(12, "web");
		System.out.println("sb="+sb);
		sb.delete(6,12);
		System.out.println("sb="+sb);
	}

}
package day20;
import java.util.*;
public class Day20_02 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("문장 입력:");
		String str = sc.nextLine();
		
			
		System.out.println("입력된 문장:"+str);	
		System.out.print("거꾸로 문장:");
		
		for(int i=str.length()-1;i>=0;i--) {
			System.out.print(str.charAt(i));
		}
		System.out.println();
		System.out.println("--------------");
		System.out.println("입력된 문장:"+str);	
		System.out.print("거꾸로 문장:");
		StringBuffer sb = new StringBuffer(str);
		System.out.println(sb.reverse());
	}

}


[StringTokenizer]

-문자열로부터 토큰을 추출하는 기능의 클래스
-열거형 클래스 : 가공된 데이터를 나열 제시.

ㄴ이미 가공되어있는 데이터를 그대로 제공. (모든 요소에 접근)

인덱스가 아닌 커서로 요소 접근.
1. 내 뒤에 데이터 있니? 
2. 그럼 그 데이터 가져와.
3. while 제어문.

package day20;
import java.util.*;

public class StringTokenizerTest {

	public static void main(String[] args) {

		
		String fruit = "사과,포도,배,딸기,바나나";
		String str = "이제 10분 남음! 힘내세요! 오늘 축구봐도 돼요. 4일 공부하고 오세요.";
		StringTokenizer st = new StringTokenizer(fruit,",");
		StringTokenizer st2 = new StringTokenizer(str);
		
		//열거형은 인덱스가 아닌 커서로 위치를 파악할 수 있다.
		//목적 : 내가 가지고 있는 문장을 구분자로 쪼개줘.
		
		
		while(st.hasMoreTokens()) {// 내 뒤에 데이터가 있니?
			String temp = st.nextToken();//있다면 temp에 담아줘(있으면 가져와)
			System.out.println(temp);
		}
		System.out.println("---------------------------");
		while(st2.hasMoreTokens()) {// 내 뒤에 데이터가 있니?
			String temp = st2.nextToken();
			System.out.println(temp);
		}
		
	}

}

- 커서 :BOF~EOF
- 조건에 의한 반복하는 while이 담당.
- import java.util.*; 을 불러와야함.

 

StringBuffer 과 String중에 StringBuffer가 먼저 생김.