※ 형식화클래스
▶ DecimalFormat
- public final String format(double number)
- 숫자를 형식화 하는데 사용됨
- 숫자 format 변경
num=123456.723456;
DecimalFormat df3 = new DecimalFormat("#,###");
str = df3.format(num);
System.out.println("str="+str); //123,457
▶ SimpleDateFormat
- public final String format(Date date)
- 날짜(Date date) 를 형식화된 문자열로 변경해줌 (Date => 형식화문자열)
Date today = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
- yyyy-MM-dd E요일 // 2022-03-14 월요일
- yyyy-MM-dd HH:mm:ss // 2022-03-14 22:16:25
▷ .parse (형식화문자열 => Date)
- public Date parse(String source) throws ParseException
- .parse 는 runtime exception 이 아니기 때문에 예외처리를 해야한다
String str="2022-01-02";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date;
try {
date = sdf.parse(str);
}catch (ParseException e) {
e.printStackTrace();
}
- 사용자가입력한 날짜와 오늘 날짜 사이의 간격구하기 : Day24 > VarClass4
※ Math 클래스의 메서드
▶ Math 메서드 목록
▶abs()
System.out.println("abs(-27.5) : "+ Math.abs(-27.5)); // abs(-27.5) : 27.5
▶ceil()
System.out.println("ceil(27.3):"+ Math.ceil(27.3)); // ceil(27.3):28.0
▶floor()
System.out.println("floor(27.6):"+ Math.floor(27.6)); //floor(27.6):27.0
▶Math.E
System.out.println("Math.E: "+ Math.E);
▶Math.PI
System.out.println("Math.PI: "+ Math.PI);
※ StringBuffer
String은 사실 !
- 변경이 불가능한 문자열의 표현을 위한 클래스
- 문자열을 더하거나 변경하면 새로운 String 객체가 생성되고, 기존 객체는버려짐
ex ) .concat()
- 두 문자열 결합 메서드
String str1 = "Happy";
String str2 = "and";
String str3 = "Smile";
String str4 = str1.concat(str2).concat(str3);
=> 추가로 생성된 인스턴스의 개수 : 2개
그래서 나온것이 ! [StringBuffer / StringBuilder]
- 변경이 가능한 문자열의 표현을 위한 클래스
StringBuilder sb = new StringBuilder("AB");
△ 이렇게 StringBuilder 객체를 생성한 후에는 StringBuilder 의 메서드를 사용할 수 있다
▶ .append()
- 문자열을 이어붙이는 메서드
sb.append(25);
sb.append('Y').append(true);
= > AB25Ytrue
.append(int index, boolean)
.append(sb.length(), char ch)
sb.insert(2, false); // index 2에다가 false 넣어라
sb.insert(sb.length(), 'Z'); // 맨마지막에 Z 넣어라
= > ABfalse25YtrueZ
[1] String 을 StringBuilder로
String str ="java";
StringBuilder sb = new StringBuilder(str);
[2] StringBuilder를 String으로
▷ toString ()
StringBuilder sb2 = new StringBuilder("안녕하세요");
String s = sb2.toString();
▶ 좀 신기한사실
- 문자열이 동일한 경우에는 하나의 String 인스턴스만 생성해서 공유한다!
String str1="Hello";
String str2="Hello";
둘의 주소(str1 ==str2) 는 같다 !
문자열이 동일하기 때문에 하나의 인스턴스만을 생성해서 공유한것
But!
- new 로 객체생성하면 인스턴스가 다르다.
String str4=new String("Hello");
String str5=new String("Hello");
= > str4 != str5
※ StringTokenizer
- 긴 문자열을 지정된 구분자를 기준으로 토큰이라는 여러 개의 작은 문자열로 잘라내는데 사용
- 구분자로 단 하나의 문자 밖에 사용하지 못함
- split() 과 유사
▷ 토큰화하기
String str = "100,200,300,400";
StringTokenizer st = new StringTokenizer(str,",");
▷ 출력하기
while(st.hasMoreTokens()) {
String token = st.nextToken();
System.out.println(token);
}
=> 토큰화 ( 나누는 것 ) 부터 출력까지 split과 거의 비슷하다
▷ split() 과 비교
String str = "100,200,300,400";
String [] arr = str.split(",");
=> 한개의 구분자 " , " 를 이용했을 때 : 토큰화한것과 결과가 동일하다
str="x=100*(200+300)/2
StringTokenizer st2 = new StringTokenizer(str,"+-*/=()", true);
1. 여러개의 구분자를 이용했을 때 :
- StringTokenizer는 한문자의 구분자만 사용할 수 있기때문에 +-*/=() 전체가 하나의 구분자가 아니라,
각각의 문자가 모두 구분자이다
- 마지막에 True 사용 시 구분자도 토큰으로 간주하여 출력된다
x
=
100
*
(
200
+
300
)
/
2
2. split()는 빈 문자열도 토큰으로 인식하는 반면
StringTokenizer 는 빈 문자열을 토큰으로 인식하지 않기 때문에 인식하는 토큰의 개수가 서로 다름
※ 연산자 ==
[1] 기본형에서는 값이 같은지 비교
[2] 참조형에서는 주소값을 비교
String의 equals() 메서드
- 문자열 값 Value 이 같은지 비교
- Object의 equals()를 오버라이딩 한 것
public boolean equals(Object obj) { // equals 메서드 오버라이딩
if(obj!=null && obj instanceof Person3) {
Person3 p = (Person3)obj; //부모 (Object) 의 자식만의 멤버 id를 불러오기위해 다운캐스팅한것
return id == p.id;
}else {
return false;
}
main()
Person3 p1 = new Person3(9901071112222L);
Person3 p2 = new Person3(9901071112222L);
if(p1.equals(p2)) { // 값비교(value)
System.out.println("p1,p2는 같은사람");
}else {
System.out.println("p1,p2는 다른사람");
}
Person 으로 객체생성해서 넣은 괄호안의 값 () 을 비교한것이다.
p1 과 p2 의 값Value 는 같으니 결과는 p1,p2는 같은사람 이 출력된다
Object의 equals()
- 주소값을 비교
class Test{
private int value;
Test(int value){
this.value = value;
}
}
main()
Test t1= new Test(10);
Test t2 = new Test(10);
if(t1==t2) {
System.out.println("t1,t2 의 주소가 같다");
}else {
System.out.println("t1,t2 의 주소가 다르다");
}
=> t1,t2 주소가 다르다
당연함 . 둘은 같은 값을 가진 String 이라서 한개의 인스턴스를 공유하고있어 주소가 같을것같지만
객체생성을 해서 값이 넣어진것이기 때문에 다른 주소를 가지고있다.
'JAVA' 카테고리의 다른 글
[JAVA] DTO / DAO (0) | 2022.04.04 |
---|---|
[JDBC] 오라클 developer - JAVA eclipse 연동 / JDBC 프로그래밍 순서 (0) | 2022.04.01 |
[JAVA] TreeSet / String , Calendar, Date 클래스의 메서드 (0) | 2022.03.13 |
[JAVA] HashSet / HashMap / ArrayList를 매개변수로 넣은 메서드 / Properties 클래스 (0) | 2022.03.10 |
[JAVA] throw / throws 떠넘기기 / 컬렉션 / ArrayList / 제네릭스 (0) | 2022.03.08 |