default로 선언하면 같은 패키지 않에서만 작동한다
package test;형태로 어느 패키지에 속하는 지 알 수 있고
import test.클래스명 형태로 가져올 수 있다
toString() 을 클래스 안에서 오버라이딩 한 후 자기만의 문자열을 리턴할 수 있다
String의 값을 비교할 때는 equals로 문자열을 비교하고 같은 레퍼런스 인지 비교할때 ==를 사용한다
wrapper 클래스
int, char 등의 기본 타입을 객체로 만들어서 사용할 수 있게 래퍼 클래스를 사용한다
Wrapper 객체는 Integer i = Integer.valueOf(10); 형태로 valueOf() 메서드를 통해서 생성한다
! 숫자를 다루는 래퍼 클래스는 Integer i = Integer.valueOf("10"); 형태로 문자열을 변환해서 생성 가능하다
래퍼 클래스는 기본 타입 <-> 문자열 하는 기능을 할떄 유용하다
자주 사용하는 int i = Integer.parseInt("123") 형태 등 parse~ 붙이는 걸로 문자열을 기본 타입으로 변환 가능하다
반대로 기본타입을 문자열로 바꿀때는 toString 메서드를 사용한다.
박싱 & 언박싱
기본 -> 래퍼 객체로 변환하는 걸 박싱, 반대를 언박싱이라고 한다
박싱과 언박싱은 자동으로 처리이루어진다
String 클래스 <- 스트링은 모두 객체로 처리된다
스트링 객체는 수정이 불가능하고 새로 재정의 하는 방식으로 변경한다
charat, compareTo, contains, replace, split 등 문자열 메서드는 잘 숙지해두자
split을 사용할때는
String s[] = a.split(",") 형태로 스트링 배열로 리턴받는다
a.substring(5) 메서드를 사용하면 5번 인덱스부터 끝가지 스트링을 리턴한다
StringBuffer 클래스
StringBuffer는 가변
StringBuffer sb = new StringBuffer("java"); 형태로 선언한다
append, delete, insert, replce, reverse, capacity 등 자주 쓴느 메서드가 있다
StringTokenizer - 특정 문자를 기준으로 문자열을 분리, split 같은 기능이다
String query = "name=ho&addr=seoul&age=21";
StringTokenizer st = new StringTokenizer(query, "&=");
이렇게 하면 '&'와 '=' 두개를 기주으로 문자열을 분리해준다
int count = st.countTokens();로 몇개로 분리됬는지를 보고
String token = st.nextToken() 으로 각 토큰에 접근해서 문자열을 가져올 수 있다
hasMoreTokens() 메서드는 다음 토큰이 잇으면 true를 리턴한다
연습문제
tostring, equals 재정의
equals를 오버라이딩하면 obj 타입으로 와서 Circle c = (Circle) obj 형태로 강제형변환을 해줘야 비교가능하다!
import java.util.*;
class Circle{
int x,y,radius;
Circle(int x, int y, int radius){
this.x = x;
this.y = y;
this.radius = radius;
}
@Override
public String toString() {
return "Circle" +x+y;
}
@Override
public boolean equals(Object obj) {
Circle c = (Circle) obj;
if (this.x == c.x & this.y == c.y) return true;
return false;
}
}
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Circle a = new Circle(2,3,5);
Circle b = new Circle(2,3,30);
System.out.println(a);
System.out.println(b);
if (a.equals(b)) System.out.println("같음");
else System.out.println("다름");
}
}
7번
StringTokenizer 보단 split 이 더 편한 것 같다
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (true){
String ss = in.nextLine();
if (ss.equals("그만")){
System.out.println("종료합니다...");
break;
}
//1번
StringTokenizer st = new StringTokenizer(ss," ");
System.out.println("어절 개수는 " + st.countTokens());
//2번
String[] arr = ss.split(" ");
System.out.println("어절 개수는 " + arr.length);
}
}
}
문자열을 한글자씩 회전
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String ss = in.nextLine();
String start = ss.substring(0);
while (true){
String s = ss.substring(0,1);
ss = ss.substring(1) + s;
System.out.println(ss);
if ((ss).equals(start)) break;
}
}
}
StringBuffer를 이용해서 문자열을 수정 love!LOVE는 love를 LOVE로 수정하는 것
sb.indexOf("찾을 문자열") 형태로 스트링빌더에서 문자열이 어디서부터 시작하는지 찾을 수 있고
sb.replace(시작인덱스,끝 인덱스, 교체할 문자열) 형태로 문자열을 교체할 수 있다
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
StringBuffer sb = new StringBuffer(s);
while (true){
System.out.print("명령 : ");
String order = in.nextLine();
String[] splits = order.split("!");
// for (String x : splits ) System.out.println(x);
if (order.equals("그만")){
System.out.println("종료합니다");
break;
}
if (splits.length < 2) {
System.out.println("잘못된 명령입니다");
continue;
}
int index = sb.indexOf(splits[0]);
if (index == -1) {
System.out.println("찾을 수 없습니다!");
}
else {
if (splits[0].length() == 0 || splits[0].length() == 0){
System.out.println("잘못된 명령입니다");
continue;
}
sb.replace(index, index+splits[0].length(),splits[1]);
System.out.println(sb);
}
}
}
}
'명품 자바' 카테고리의 다른 글
명품자바 7장 제네릭,컬렉션 (1) | 2023.12.31 |
---|---|
명품자바 5장 (1) | 2023.12.26 |
명품자바 4장 (1) | 2023.12.23 |
가비지 발생시점 (0) | 2023.11.17 |